我试图设计一个动态SQL脚本。 但是,我忘记了如何将int类型变量(@t)传递到脚本中。 我记得我没有使用转换功能将数据类型更改为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)
答案 0 :(得分:0)
答案 1 :(得分:0)
有多种方法:
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 injection的页面。如果您使用来自用户输入的值,则可能会遇到little bobby tables。