2017-01-04 3 views
0

Ich schrieb eine dynamische Pivot und muss die Ergebnisse in eine temporäre Tabelle eingeben, um die Ergebnisse zu einer anderen Tabelle zu verbinden.Wählen Sie * in Temp Tabelle von Dynamic SQL Ergebnisse

Vielleicht gibt es einen besseren Weg, um die gewünschten Ergebnisse zu erhalten, ohne in eine Temp-Tabelle einzufügen? Kann ich an einer Tabelle im Dynamic Pivot teilnehmen, um das gewünschte Ergebnis zu erzielen?

Getting die Fehler:

Msg 263, Level 16, State 1, Line 59 
Must specify table to select from. 

Msg 1038, Level 15, State 5, Line 59 
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name. 

Mein Code ist folgende:

declare @RealYear as nvarchar(max) 
select @RealYear= '2016' 
IF OBJECT_ID('tempdb.dbo.#TempCosts', 'U') IS NOT NULL 
    DROP TABLE #TempCosts; 

IF OBJECT_ID('tempdb.dbo.#TempCostsFinal', 'U') IS NOT NULL 
    DROP TABLE #TempCostsFinal; 

select * into #TempCosts from 
(
--Journal Entries 
select * from lth.dbo.vwJournalEntries_LTWS1 
union all 
--Non Journal Entries 
select *,'' from lth.dbo.vwweeklydebits_ltws1 
)D 

--select * from #TempCosts 
DECLARE @cols AS NVARCHAR(MAX) 
declare @query AS NVARCHAR(MAX) 
declare @temptable as nvarchar(max) 

select @cols = STUFF((SELECT ',', QUOTENAME(AccountRef_FullName) 
    from #TempCosts 
        group by AccountRef_FullName 
        having accountref_Fullname is not null 
        order by AccountRef_FullName 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT *, ' + @cols + ' from 
      (
       select * 
       from #TempCosts 
       where year = ' + @RealYear + ' 
      ) x 
      pivot 
      (
       sum(Amount) 
       for AccountRef_FullName in (' + @cols + ') 
      ) p 

     ' 


     execute(@query) 


    select * into #TempCostsFinal Execute(@query) 

Antwort

1

Es ist riskant, weil Sie das Risiko von Kollisionen laufen und nicht sehr effizient, aber Sie können die dynamischen Ergebnisse in einem ## TempPivot

Set @query = ' 

IF OBJECT_ID(''tempdb..##TempPivot'') IS NOT NULL 
    DROP TABLE ##TempPivot 


SELECT *,' + @cols + ' 
Into ##TempPivot 
From (
     select * 
     from #TempCosts 
     where year = ' + @RealYear + ' 
     ) x 
    pivot 
    (
     sum(Amount) 
     for AccountRef_FullName in (' + @cols + ') 
    ) p 
' 
Exec(@query) 

Select * Into #Temp from ##TempPivot 

Drop Table ##TempPivot 
1

Erstellen Sie die temporäre Tabelle mit der richtigen Design. Dann statt SELECT * INTO benutzen Sie die folgende Abfrage

INSERT into #TempCostsFinal 
Execute(@query) 
+1

Due Drop Für das dynamische Pivot wird die Temp-Tabelle dynamische Spalten haben, die ich nicht kenne, bis die Abfrage ausgeführt wurde. –

+0

@GrimRieber Siehe die Antwort von John. Scheint, dass es eine gute Option ist. Verwenden Sie entweder eine globale temporäre Tabelle oder eine "permanente temporäre" Tabelle. Vergessen Sie nicht, die Tabelle (falls vorhanden) vor dem Ausführen der Abfrage zu löschen. –

Verwandte Themen