我一直在使用动态查询在SQL服务器一样了:sp_executesql的使用总是真实情况
declare @sql nvarchar (1000),@condition nvarchar(100)='';
set @sql=N'select * from tablename where (0=0)'[email protected]+'';
exec(@sql)
这个我能得到我的结果@condition是否有任何价值或不是。 但是我知道sp_executesql
比exec
更好,因为它促进了查询计划的重用。
所以,我想我的`sp_executesql的查询,
set @sql =N'select * from dbo.testclient where (0=0) @condition'
exec sp_executesql @sql,N'@condition nvarchar(100)',@condition
,但它因错误而失败的
Incorrect syntax near '@condition'.
我的问题是如何才能让上面的查询与sp_executesql
在哪里工作参数@condition可以是一个条件或空白(''),我做错了什么。
动态SQL是有风险的。也许你应该尝试找出一种方法,在没有它的情况下得到你想要的东西。 –
这仍然是一个开放的SQL注入攻击。如果用户输入条件'column ='value'; drop table tablename;'',你认为会发生什么? –
@Zohar首先感谢指出这个问题,我们务实地为查询创建参数,第二我只是想避免写多个条件来获得相同的结果。 – vikscool