小弟基础浅薄,还请大家别怪。执行下列sql为什么会报错呢?
alter proc proc_test
@name varchar(20)
as
declare @sql nvarchar(200)
set @sql =N' select * from k_memberCus where name like @name'
exec sp_execute @sql
go
exec proc_test 'M'''错误:过程需要参数 '@handle' 为 'int' 类型。
描述:如果我一定要将@name在这里参数化输入进去,应该怎么处理.
不可以使用字符串拼接的方法。
alter proc proc_test
@name varchar(20)
as
declare @sql nvarchar(200)
set @sql =N' select * from k_memberCus where name like @name'
exec sp_execute @sql
go
exec proc_test 'M'''错误:过程需要参数 '@handle' 为 'int' 类型。
描述:如果我一定要将@name在这里参数化输入进去,应该怎么处理.
不可以使用字符串拼接的方法。
你这样就是一个字符串了 你要这样只能字符串拼接
@name varchar(20)
as
declare @sql nvarchar(200)
set @sql = N'select * from k_memberCus where name like ''%' + @name + '%'''
exec sp_execute @sql
go
exec proc_test 'M'
set @sql =N'select * from k_memberCus where name like ''%'+ @name +'%'''
EXEC(@sql)
--或者
declare @sql nvarchar(200)
set @sql =N'select * from tb where aaa like ''%'+ @name + '%'''
exec sp_executesql @sql, N'@name varchar(20)', @name
dawugui的方法我会,不过这样会被注入哇?
其实也许我的问题是否可以说 如何在 拼装的Sql里面使用参数化的变量?
exec sp_executesql 这俩就可以了你这样写,你觉得怎么才能注入呢?
select * from tb where aaa like '%' + @name + '%'
不知道这样语法有没有错,但是相信你还是能够理解我的。
declare @name varchar(20)
set @name='''or 1=1;select 1'
select * from jqfx where [bb] like '%' + @name + '%'
exec sp_executesql 这俩就可以了
declare @name varchar(100),@sql varchar(2000)
set @name ='1%'' or 1 like ''%1'
set @sql ='select * from k_memberCus where cusName like ''%' + @name + '%'' '
exec (@sql)
注:很明显@name被注入了.不过我想知道的问题是如何保证@name的安全性,但是又不放弃'这样的符号。
(跟程序没有关系,我说纯SQL的)
set @name = replace(@name,'''','''''')