Sql server SQL server 2012-从动态脚本返回变量值

Sql server SQL server 2012-从动态脚本返回变量值,sql-server,sql-server-2012,sp-executesql,Sql Server,Sql Server 2012,Sp Executesql,我试图运行一个动态脚本,然后返回变量,这样我就可以传递到脚本的其余部分。在Google的帮助下,我有几种方法,但我认为我仍然没有得到正确的语法,因此返回了错误或空值 有人能告诉我哪里出了问题吗 例如: 返回变量@table_name的值 ASIA是数据库,设置为变量,该变量附加到从表中检索的表名,T5148是表中的id,用于将表名转换为变量。我已经设置了一个变量,因为当其他脚本循环时,这个脚本会出现 多谢各位 declare @table_name nvarchar(50) declare @d

我试图运行一个动态脚本,然后返回变量,这样我就可以传递到脚本的其余部分。在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

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

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

多谢各位。不幸的是,它给了我以下错误消息:Msg 214,级别16,状态2,过程sp_executesql,第1行过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。对不起,我使用的是SQL Server 2012…是否相同?在SS 2014 Expresit上效果很好它应该适用于SQL Server 2008及以上版本。我可以问一下,由于此字段是varchar类型,如何将@id变量转换为单引号吗?