在 SQL 中将变量编织成 table 个名称
Weave variables into table names in TSQL
我正在尝试学习使用动态 SQL 来自动执行需要大量输入的操作。但是,这将包括将变量直接放入 table 名称(而不是整个 table 名称)。
当 运行 直接在 SSMS 中执行以下查询时,我得到了输出 "Command(s) completed successfully"... 但我更愿意得到查询输出。我哪里错了?
DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25)
DECLARE @type NVARCHAR(25)
SET @sql = '
SELECT EntityID, ''@cat'' AS c, Subcategory'+@type+'
FROM WCO..Entity'+@cat+' a
JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
WHERE
EntityID IN Ent_ID IN (728456,762360)
'
EXECUTE sp_executesql @sql, N'@cat NVARCHAR(25), @type NVARCHAR(25)', 'AdverseMedia', 'Label'
当您构建 @sql
时,您将 @cat
和 @type
连接到字符串中,但是,它们是未初始化的。因此,当您执行时,您的 @sql
变量是 null
(尝试在 sp_executesql
之前使用 print @sql
)。您正在寻找更多类似(注意声明中的初始化):
DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25) = 'AdverseMedia'
DECLARE @type NVARCHAR(25) = 'Label'
SET @sql = '
SELECT EntityID, '''+@cat+''' AS c, Subcategory'+@type+'
FROM WCO..Entity'+@cat+' a
JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
WHERE
EntityID IN Ent_ID IN (728456,762360)
'
PRINT @sql
EXECUTE sp_executesql @sql
我正在尝试学习使用动态 SQL 来自动执行需要大量输入的操作。但是,这将包括将变量直接放入 table 名称(而不是整个 table 名称)。
当 运行 直接在 SSMS 中执行以下查询时,我得到了输出 "Command(s) completed successfully"... 但我更愿意得到查询输出。我哪里错了?
DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25)
DECLARE @type NVARCHAR(25)
SET @sql = '
SELECT EntityID, ''@cat'' AS c, Subcategory'+@type+'
FROM WCO..Entity'+@cat+' a
JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
WHERE
EntityID IN Ent_ID IN (728456,762360)
'
EXECUTE sp_executesql @sql, N'@cat NVARCHAR(25), @type NVARCHAR(25)', 'AdverseMedia', 'Label'
当您构建 @sql
时,您将 @cat
和 @type
连接到字符串中,但是,它们是未初始化的。因此,当您执行时,您的 @sql
变量是 null
(尝试在 sp_executesql
之前使用 print @sql
)。您正在寻找更多类似(注意声明中的初始化):
DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25) = 'AdverseMedia'
DECLARE @type NVARCHAR(25) = 'Label'
SET @sql = '
SELECT EntityID, '''+@cat+''' AS c, Subcategory'+@type+'
FROM WCO..Entity'+@cat+' a
JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
WHERE
EntityID IN Ent_ID IN (728456,762360)
'
PRINT @sql
EXECUTE sp_executesql @sql