您的位置:首页 > 数据库

SQL:如何在LIKE语句中使用参数,以及动态执行SQL语句

2009-05-24 11:00 891 查看
拼SQL的方法不好,因为有安全的风险,容易造成SQL的语法错误甚至SQL注入攻击。安全的方法是将'%'加入到参数中:

--查询图书表中与查询关键字匹配的书籍信息

ALTER PROCEDURE [dbo].[SP_SelectByKeywordProc]
(
@Keyword varchar(40)
)

AS

BEGIN

DECLARE @SqlString nvarchar(400);

SET @SqlString = N'SELECT * FROM BOOK WHERE BOOK_NAME LIKE @Key_word ';

SET @KeyWord = N'%' + Keyword + '%';

EXEC SP_EXECUTESQL @SqlString, N'@Key_word varchar(40)', @Key_word= @KeyWord;

RETURN(0);

END

这里还要注意带参数的SP_EXECUTESQL系统存储过程的使用方法:

1、前两句为字符串,其中第一句为执行的SQL语句;第二句为语句中参数的定义,如果有多个变量则用逗号分隔;

2、后面的子句为赋值语句,可以有多个;

3、执行的动态SQL语句应当为ntext/nchar/nvarchar型,否则会报错:“Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.”

MSDN上的例子:

DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @max_title varchar(30);

SET @IntVariable = 197;
SET @SQLString = N'SELECT @max_titleOUT = max(Title)
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID = @level';
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: