如何将int类型变量放入动态

时间:2018-10-03 19:24:44

标签: sql tsql dynamic-sql

我试图设计一个动态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)

2 个答案:

答案 0 :(得分:0)

您可以Cast将int转换为nvarchar:

..

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

..

答案 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