0

Выполнение следующего запроса, показывающего Invalid object name '#temp1'., может любой орган знает, что произошла ошибка, из-за которой это мой исходный код, который я использовал для извлечения кода, ее таблицы differnt сформированы. Мне нужно получить сумму каждой строки каждого таблицаПоказ "Недопустимое имя объекта" в sqlServer?

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] = ''' [email protected] +''' 
        ) as t 
       PIVOT (
       MAX([Stock]) FOR [SubInventory] IN ('+STUFF(@columns,1,1,'')+') 

     ) as pvt' 

    EXEC sp_executesql @sql 

    select * from #temp1 
+0

вам необходимо создать таблицу первого, то она будет доступна в динамическом SQL - отсюда http://stackoverflow.com/ Вопросы/2917728/t-sql-dynamic-sql-and-temp-tables –

+0

'PIVOT ( MAX ([Stock]) ДЛЯ [SubInventory] IN ('+ STUFF (@ columns, 1,1,' ') +') 'это, может быть изменено каждый раз, в соответствии с ветвями, то как я могу создать стабильную таблицу для этого –

+0

IDK :) попробуйте использовать простую постоянную таблицу и отбросить ее после ... hm? –

ответ

0

Во-первых, нет необходимости в создании таблицы # temp1.

потому что вы используете «Выбрать * в», которые уже создают в нем таблицу.

Предположим, что это примечание в качестве комментария, но у меня недостаточно баллов для репутации.


Причина

Invalid object name '#temp1' 

является: переменная @sql является NULL, поскольку # TEMP1 еще не создан с помощью "Select * в" п.

так присоединять выбор из # temp1 в динамическом SQL, как:

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

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

    ) as pvt 
    select * from #temp1 ' 

EXEC sp_executesql @sql