我正在尝试运行一个动态脚本,然后返回变量,这样我就可以传递到脚本的其余部分。在谷歌的帮助下,我有几种方法,但我认为我仍然没有得到正确的语法,因此返回了错误或null值。
有人能告诉我哪里出了问题吗。
例如:返回变量@table_name的值ASIA是数据库,它被设置为变量,该变量被附加到从表中检索的表名,T5148是来自表的id,以使表名变为变量。当其他脚本循环时,我已经设置了这个变量
谢谢
declare @table_name nvarchar(50)
declare @database nvarchar(50)
declare @id nvarchar(50)
declare @sql nvarchar(max)
set @database = 'ASIA'
set @id = 'T5178'
set @sql = N'SELECT @table_name = ''@database''+table_name
FROM ''@database''+tables (NOLOCK)
WHERE id = ''@id'''
exec sp_executesql @sql, N'@table_name nvarchar(50) output', @table_name output
select @TRAN_TABLE
如果我没有错,这就是你需要的:
DECLARE @table_name NVARCHAR(50)
DECLARE @database NVARCHAR(50)
DECLARE @id NVARCHAR(50)
DECLARE @sql NVARCHAR(MAX)
SET @database = 'ASIA'
SET @id = 'T5178'
SET @sql = N'SELECT @table_name = table_name
FROM ' + @database+'.dbo.tables (NOLOCK)
WHERE id = @id'
EXEC SP_EXECUTESQL @sql, N'@id nvarchar(50),@table_name nvarchar(50) output',
@id = @id, @table_name = @table_name OUTPUT
SET @table_name = @database + @table_name
注意:根据模式名称更改dbo。