2016-06-08 16 views
0

Ich versuche zu lernen, dynamisches SQL zu verwenden, um zu automatisieren, was sonst viel Typisierung erfordern würde. Dies würde jedoch beinhalten, dass Variablen direkt in Tabellennamen (nicht als der gesamte Tabellenname) eingefügt werden.Variablen in Tabellennamen in TSQL weben

Wenn ich die folgende Abfrage direkt in SSMS ausführe, bekomme ich die Ausgabe "Befehl (e) erfolgreich abgeschlossen" ... aber ich möchte lieber die Abfrage ausgeben. Wo gehe ich falsch?

DECLARE @sql NVARCHAR(MAX) 
DECLARE @cat NVARCHAR(25) 
DECLARE @type NVARCHAR(25) 

SET @sql = ' 
      SELECT EntityID, ''@cat'' AS c, Subcategory'[email protected]+' 
      FROM WCO..Entity'[email protected]+' a 
      JOIN WCO..Entity'[email protected]+'Subcategory b ON a.Entity'[email protected]+'ID = b.Entity'[email protected]+'ID 
      JOIN WCO..'[email protected]+'Subcategory c ON b.'[email protected]+'SubcategoryID = c.'[email protected]+'SubcategoryID 
      WHERE 
       EntityID IN Ent_ID IN (728456,762360) 
      ' 

EXECUTE sp_executesql @sql, N'@cat NVARCHAR(25), @type NVARCHAR(25)', 'AdverseMedia', 'Label' 

Antwort

2

Wenn Sie @sql Konstruktion sind Sie verketten @cat und @type in den String, sie sind jedoch nicht initialisiert. Als Ergebnis ist Ihre @sql Variable null, wenn Sie zur Ausführung gehen (versuchen Sie mit print @sql direkt vor der sp_executesql). Sie sind für mehr wie (man beachte die Initialisierungen in den Erklärungen) suchen:

DECLARE @sql NVARCHAR(MAX) 
DECLARE @cat NVARCHAR(25) = 'AdverseMedia' 
DECLARE @type NVARCHAR(25) = 'Label' 

SET @sql = ' 
      SELECT EntityID, '''[email protected]+''' AS c, Subcategory'[email protected]+' 
      FROM WCO..Entity'[email protected]+' a 
      JOIN WCO..Entity'[email protected]+'Subcategory b ON a.Entity'[email protected]+'ID = b.Entity'[email protected]+'ID 
      JOIN WCO..'[email protected]+'Subcategory c ON b.'[email protected]+'SubcategoryID = c.'[email protected]+'SubcategoryID 
      WHERE 
       EntityID IN Ent_ID IN (728456,762360) 
      ' 
PRINT @sql 
EXECUTE sp_executesql @sql 
+0

'@ cat' innen' @ verwendet wird sql' –

+1

Ich reparierte die '@ cat' innerhalb' @ sql'. – JiggsJedi

+0

Danke ... guter Fang! – user212514