我正在编写一个需要动态附加数据库名称的查询。
查询从表中获取值(在另一个数据库中),我想知道是否有更好的方法/方式。
所以我的查询如下:
DECLARE @TagNames AS VARCHAR(MAX) --Probably this is not a Global variable
DECLARE @QUERY AS VARCHAR(MAX)
SET @QUERY ='SELECT @TagNames = coalesce( @TagNames + '','','''') +
fldTagName FROM '+ dbo.fnGetZiConfigValue('KEYNAME')+'.dbo.tblTags Where
fldInterpolate = 1 AND fldUnitID = 13'
EXEC (@QUERY)
当我执行此操作时,我收到错误,
必须声明标量变量" @ TagNames"。
答案 0 :(得分:4)
肯定不是全局变量。你必须在动态SQL中“声明”它并返回外部,就像你用存储过程一样。
DECLARE @TagNames AS VARCHAR(MAX) --Probably this is not a Global variable
DECLARE @QUERY AS NVARCHAR(MAX)
SET @QUERY = N'SELECT @TagNames = coalesce( @TagNames + '','','''') +
fldTagName FROM '+ QUOTENAME(dbo.fnGetZiConfigValue('KEYNAME'))+'.dbo.tblTags Where
fldInterpolate = 1 AND fldUnitID = 13'
exec sp_executesql @QUERY, N'@TagNames VARCHAR(MAX) OUTPUT', @TagNames OUTPUT
对于sp_executesql
动态sql,它的params声明必须是NVarchar。