Как назначить значения параметров для sp_executesql прямо из таблицы? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть этот кусок кода:

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

@ ParmValues ​​равно '@var1Value = @var1Value,@var1= @var1 OUTPUT'.

Этот код выдает ошибку преобразования из int в varchar, но при запускеназначения напрямую, без запроса из таблицы, все работает нормально.

EXEC sp_executesql N'SELECT @var1 = @var1Value', N'@var1 int OUTPUT,  
@var1Value int',  @var1Value = @var1Value,@var1= @var1 OUTPUT

Есть ли способ получить назначения непосредственно из таблицы?

Спасибо за ответы.

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете использовать динамический 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...