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;
--查询图书表中与查询关键字匹配的书籍信息
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;
相关文章推荐
- ReportView如何使用构造SQL语句带参数的存储过程创建报表以及为rdlc传递参数
- MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)
- 使用ADO.NET执行带参数的Sql语句
- 教您如何使用SQL中的SELECT LIKE like语句
- 使用Oracle的DBMS_SQL包执行动态SQL语句
- 根据参数指定的列名和值查询员工信息(使用动态sql语句)
- 【转】ibatis.net中的单个参数查询、多个参数查询和实体类查询以及动态SQL语句生成查询
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
- MySql带参数的存储过程编写(动态执行SQL语句)
- oracle存储过程中如何执行动态SQL语句
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- Mybatis中如何在SQL语句表名中使用参数
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
- 传值设置mybatis查询的 列名(字段名),以及如何查看mybatis中执行的SQL语句
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- 多条件查询--使用dapper命令参数动态拼接出最安全的sql语句
- 使用Oracle的DBMS_SQL包执行动态SQL语句
- 如何使用动态SQL语句?