2016-06-08 5 views
0

Я пытаюсь научиться использовать динамический SQL для автоматизации того, что в противном случае требовало бы много ввода. Однако это будет включать в себя перенос переменных непосредственно в имена таблиц (а не как полное имя таблицы).Переплетение переменных в имена таблиц в TSQL

При выполнении нижеследующего запроса непосредственно в SSMS я получаю вывод «успешно завершена команда» ... но я предпочел бы получить вывод запроса. Где я иду не так?

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' 

ответ

2

Когда вы построения @sql вы конкатенации @cat и @type в строку, тем не менее, они неинициализированным. В результате ваша переменная @sql равна null, когда вы идете выполнить (попробуйте использовать print @sql прямо перед sp_executesql). Вы ищете больше как (обратите внимание на инициализацию в декларациях):

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' используется внутри' @ sql' –

+1

я установил '@ cat' внутри' @ sql'. – JiggsJedi

+0

Спасибо ... хорошо поймать! – user212514