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