0

Lors de l'exécution de la requête suivante, le Invalid object name '#temp1'. peut montrer à n'importe quel corps que l'erreur est survenue, raison pour laquelle c'est le code original que j'ai utilisé pour récupérer le code, ses tables differnt sont formées. tableAffichage de "Nom d'objet invalide" dans 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

vous devez créer votre table d'abord, puis il sera disponible dans la dynamique sql - d'ici http://stackoverflow.com/ questions/2917728/t-sql-dynamic-sql-and-temp-tables –

+0

'PIVOT ( MAX ([Stock]) POUR [SousInventaire] IN ('+ STUFF (@ columns, 1,1,' ') +') 'cela, peut être changer à chaque fois, selon les branches, alors comment puis-je créer une table stable pour ce –

+0

IDK :) essayer d'utiliser une simple table persistante et le laisser tomber après ... hm? –

Répondre

0

Premièrement, il n'est pas nécessaire de créer une table # temp1 avant.

parce que vous utilisez "Select * into" qui crée déjà une table à l'intérieur. Supposons que vous ayez tapé cette note comme commentaire, mais que je n'ai pas assez de réputation.


La raison de

Invalid object name '#temp1' 

est: la @sql variable est NULL car # temp1 est pas encore créé via la clause "Sélectionnez * dans".

si append la sélection de # temp1 dans SQL dynamique comme suit:

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