1

我正在尝试运行一个动态脚本,然后返回变量,这样我就可以传递给我的脚本的其余部分。在 Google 的帮助下,我有几种方法,但我认为我的语法仍然不正确,因此返回错误或空值。

有人可以告诉我哪里出错了。

例如:要返回变量@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
4

1 回答 1

2

如果我没记错的话,这就是你需要的:

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 更改为您的架构名称。

于 2015-07-02T06:58:48.773 回答