Sql server 在TSQL中将变量编织到表名中
我正在尝试学习如何使用动态SQL来自动化否则需要大量键入的内容。但是,这将包括将变量直接放入表名中(而不是作为整个表名) 当直接在SSMS中运行下面的查询时,我得到输出“Command(s)completed successfully”。。。但我更希望得到查询输出。我哪里做错了Sql server 在TSQL中将变量编织到表名中,sql-server,tsql,dynamic-sql,ssms-2014,Sql Server,Tsql,Dynamic Sql,Ssms 2014,我正在尝试学习如何使用动态SQL来自动化否则需要大量键入的内容。但是,这将包括将变量直接放入表名中(而不是作为整个表名) 当直接在SSMS中运行下面的查询时,我得到输出“Command(s)completed successfully”。。。但我更希望得到查询输出。我哪里做错了 DECLARE @sql NVARCHAR(MAX) DECLARE @cat NVARCHAR(25) DECLARE @type NVARCHAR(25) SET @sql = ' SELE
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
)。您正在寻找更像(注意声明中的初始化):
当您构造
@sql
时,您将@cat
和@type
连接到字符串中,但是,它们是未初始化的。因此,在执行时,@sql
变量为null
(尝试在sp_executesql
之前使用print@sql
)。您正在寻找更像(注意声明中的初始化):
@cat
在@sql
中使用。我修复了@sql
中的@cat
。因此,我的方法是,在sp_executesql
后面有参数,这是为什么?这是我在网上找到的方式,但你的方式才是有效的。这肯定是一个问题,因为你连接了@cat
,尽管它是null
,这意味着@sql
是null(以及为什么我建议添加打印
。如果在@sql
中有@cat
,而不是将其全部串联在一起,那么您尝试的变量替换可能会起作用。我只是不确定您是否可以在表名中成功地使用@cat
。@cat
在@sql
中使用。我在@sql
中修复了@cat
。因此,我的方法是,在sp_executesql
之后加上参数,这是为什么?这是我在网上找到的方法,但你的方法是有效的。显然存在一个问题,你在连接@cat
,即使它是@sql
为null(以及为什么我建议添加打印
。如果在@sql
中有@cat
,而不是将其全部串联在一起,那么您尝试的变量替换可能会起作用。我只是不确定您是否能够在表名中成功使用@cat
)。
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