Как поместить переменную типа int в динамический

Я пытался разработать динамический сценарий 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 ответа

Вы можете использовать Cast для преобразования int в nvarchar:

..

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

..

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

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);

--use 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. Если вы используете значения, поступающие из пользовательского ввода, вы можете встретить маленькие таблицы Бобби.

Другие вопросы по тегам