【问题标题】:How to add a temp table in SQL server如何在 SQL Server 中添加临时表
【发布时间】:2018-05-11 14:36:50
【问题描述】:

我正在尝试向我的查询添加一个临时表,以便我可以查询该临时表,我已经搜索了互联网,但我找不到解决方案。 这是我的查询

;WITH cte AS (
        SELECT ID, g.Name
        FROM game.Game g WITH(NOLOCK
        WHERE ID IN (SELECT Data FROM system.Split(1, ','))
        UNION ALL 
        SELECT g.ID,  g.Name
        FROM game.Game g WITH(NOLOCK) 
            JOIN cte ON g.ParentID = cte.ID
    )

    SELECT  c.ID,
        c.Name

    FROM cte c
        INNER JOIN list.Type gt WITH(NOLOCK) ON c.TypeId = gt.TypeID

    WHERE c.ID NOT IN (SELECT Data FROM system.Split(1, ','))
        AND c.ID IN (SELECT ID FROM game.code WITH(NOLOCK)
        WHERE ID = c.ID
            AND StatusCode IN ('OP', 'CL', 'SU')
            AND isDisplay = 'True' 
            AND GETDATE() BETWEEN DisplayStart AND DisplayEnd
            AND GETDATE() < ISNULL(ResultDateTime, ResultExpected) 
        )

当我运行它时,它给了我以下信息

ID    | Name
1111  | BaseBall
2222  |BasketBall
45896 |Relay

现在我尝试如下创建一个临时表

Create Table #temp(
        ID int,
        Name varchar
        )
        ;WITH cte AS (
        SELECT ID, g.Name
        FROM game.Game g WITH(NOLOCK)
        WHERE ID IN (SELECT Data FROM system.Split(1, ','))
        UNION ALL 
        SELECT g.ID,  g.Name
        FROM game.Game g WITH(NOLOCK) 
            JOIN cte ON g.ParentID = cte.ID
    )
    insert into #temp  // i wanted to set these values in the temp table
    SELECT  c.ID,
        c.Name

    FROM cte c
        INNER JOIN list.Type gt WITH(NOLOCK) ON c.TypeId = gt.TypeID

    WHERE c.ID NOT IN (SELECT Data FROM system.Split(1, ','))
        AND c.ID IN (SELECT ID FROM game.code WITH(NOLOCK)
        WHERE ID = c.ID
            AND StatusCode IN ('OP', 'CL', 'SU')
            AND isDisplay = 'True' 
            AND GETDATE() BETWEEN DisplayStart AND DisplayEnd
            AND GETDATE() < ISNULL(ResultDateTime, ResultExpected) 
        )

每次我尝试将此信息存储在临时表中时,它都会给我一个错误“列名或提供的值的数量与表定义不匹配。”但是我只有两个值。我做错了什么我看不到?

【问题讨论】:

标签: sql sql-server temp-tables


【解决方案1】:

首先,为什么不直接使用select into

IF OBJECT_ID('TempDB..#temp') IS NOT NULL  
BEGIN
    DROP TABLE #temp
END
select c.ID, c.Name
into #temp
from . . .

那么您就不需要将#temp 定义为表格。

接下来,你的定义很糟糕,因为Name 只有一个字符。这将通过select into 修复。

但是,我不知道您为什么会收到您遇到的特定错误。列数似乎匹配。

【讨论】:

  • 请注意,在同一会话中执行此操作时会引发错误。
猜你喜欢
  • 2019-01-03
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多