如何在SQL Server中添加临时表

时间:2018-05-11 14:36:50

标签: sql sql-server temp-tables

我正在尝试向我的查询添加临时表,以便我可以查询该临时表,我已经搜索了互联网,但我无法获得解决方案。 这是我的查询

;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) 
        )

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

1 个答案:

答案 0 :(得分:2)

首先,为什么不使用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修正。

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