在sqlServer中显示“无效的对象名称”?

时间:2016-10-06 12:01:21

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2012

在执行以下查询时显示Invalid object name '#temp1'.可以任何正文知道发生错误的原因是这是我用于获取代码的原始代码,她的不同表格形成我需要得到的总和每个表的每一行

DECLARE @t TABLE (
                        id int IDENTITY(1,1),
                        BranchName nvarchar(max)
                     )

DECLARE @n int = 0,
        @i int = 1,
        @BranchName nvarchar(max),
        @sql nvarchar(max),
        @columns nvarchar(max)

INSERT INTO @t
    SELECT DISTINCT BranchName
    FROM ALX_Branches

    SELECT @n = @@ROWCOUNT

WHILE @n >= @i
BEGIN
    SELECT @BranchName = BranchName
    FROM @t
    WHERE id = @i
    SELECT @columns = (
                        SELECT DISTINCT ','+QUOTENAME([SubInventory])
                        FROM #MyTempTable
                        WHERE [BranchName] = @BranchName
                        FOR XML PATH('')
                      )

SELECT @sql = N'--
                    SELECT * into #temp1
                    FROM (
                            SELECT [BranchID],
                            [SubInventory],
                            [Product],
                            [Stock] 

                    FROM #MyTempTable
                    WHERE [BranchName] = ''' +@BranchName +'''
                    ) as t
                PIVOT (
                MAX([Stock]) FOR [SubInventory] IN ('+STUFF(@columns,1,1,'')+')

        ) as pvt'

    EXEC sp_executesql @sql

    select * from #temp1

1 个答案:

答案 0 :(得分:0)

首先,不需要在之前创建#temp1表。

因为您正在使用已经在其中创建表格的“Select * into”。

假设将此注释键入为注释,但我没有足够的信誉得分。

的原因
Invalid object name '#temp1'

是:变量@sql为NULL,因为#temp1尚未通过“Select * into”子句创建。

所以追加从动态sql中的#temp1中选择如下:

SELECT @sql = N'--
                SELECT * into #temp1
                FROM (
                        SELECT [BranchID],
                        [SubInventory],
                        [Product],
                        [Stock] 

                FROM #MyTempTable
                WHERE [BranchName] = ''' +@BranchName +'''
                ) as t
            PIVOT (
            MAX([Stock]) FOR [SubInventory] IN ('+STUFF(@columns,1,1,'')+')

    ) as pvt
    select * from #temp1 '

EXEC sp_executesql @sql