Как поместить переменную типа int в динамический - PullRequest
0 голосов
/ 03 октября 2018

Я пытался создать динамический скрипт SQL.однако я забыл, как передать переменную типа int (@t) в скрипт.Вместо использования функции convert для изменения типа данных на varchar, я помню, что я могу просто использовать некоторые 'или ", затем я могу передать их в свою переменную varchar (@script), а затем выполнить позже. Может кто-нибудь помочь мне с этим? Спасибо !!

Ниже приведены мои коды

create table #test
(
    id int
    ,name nvarchar(20)
)
insert into #test (id, name) values (1, 'ggg'),(2, 'hhh'),(3, 'ppp')
select * from #test
declare @t as int
declare @script as nvarchar(200)
set @t = 2
set @script = 'select * from #test ' 
set @script = @script + 'where id =' + @t
exec(@script)

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Существуют различные подходы:

create table #test(id int,name nvarchar(20));
insert into #test (id, name) values (1, 'ggg'),(2, 'hhh'),(3, 'ppp')

declare @t int=2;
declare @script nvarchar(200);

- приведение к varchar

set @script='select * from #test where id =' + CAST(@t AS VARCHAR(100));

- преобразование для того же эффекта

set @script ='select * from #test where id =' + CONVERT(VARCHAR(100),@t);

- использованиеCONCAT (требуется SQL-Server 2012 +)

set @script =CONCAT('select * from #test where id =',@t);

exec(@script);

Но это то, что вы действительно должны делать:

set @script ='select * from #test where id = @id';

EXEC sp_executesql @script,N'@id INT',@id=@t;

Динамически объединяя операторы (и особенно параметры!), Вы открываете васдля впрыска sql .Если вы используете значения, поступающие из пользовательского ввода, вы можете встретить маленькие таблицы Бобби .

0 голосов
/ 03 октября 2018

Вы можете Cast , чтобы преобразовать int в nvarchar:

..

set @script = @script + 'where id =' + CAST(@t as nvarchar(max))

..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...