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

拼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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值