我有这段代码:
print(SwimmingWithTheFishes(shark).print_return())
@ParmValues等于DECLARE @var1 int
DECLARE @var1Value int = 10
DECLARE @sSQL nvarchar(max) = N'SELECT @var1 = @var1Value';
DECLARE @ParmDefinition nvarchar(max) = N'@var1 int OUTPUT, @var1Value int';
DECLARE @ParmValues varchar(max) = (select paramsValues from Table_1 where id = 1)
EXEC sp_executesql N'SELECT @var1 = @var1Value', N'@var1 int OUTPUT,
@var1Value int', @ParmValues
。
这段代码会引发从int到varchar的转换错误,但是如果直接运行赋值,并且没有表的查询,就可以正常工作。
'@var1Value = @var1Value,@var1= @var1 OUTPUT'
是否可以直接从表格中获取分配?
谢谢您的回答。
答案 0 :(得分:0)
您可以使用动态SQL。从其组成部分中构建一个字符串,然后执行该字符串。
注意:字符串是在其自己的范围内执行的,因此任何引用的变量都必须出现在字符串本身中。
create table Table_1 ( ID int, paramsValues varchar(max) )
insert into Table_1 ( ID, paramsValues ) values
( 1, '@var1Value = @var1Value,@var1= @var1 OUTPUT' )
DECLARE @sSQL nvarchar(max) = N'SELECT @var1 = @var1Value';
DECLARE @ParmDefinition nvarchar(max) = N'@var1 int OUTPUT, @var1Value int';
DECLARE @ParmValues varchar(max) = (select paramsValues from Table_1 where id = 1)
declare @S nvarchar(300)
set @S = 'DECLARE @var1 int '
+ 'DECLARE @var1Value int = 10 '
+ 'EXEC sp_executesql '
+ 'N''' + @sSQL + ''','
+ 'N''' + @ParmDefinition + ''','
+ @ParmValues
exec sp_executesql @S