MSSQL 存储过程问题一个十分奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:19:02
--创建--
alter proc hdpt_InsertUpdateDelete
@Type varchar(50),--动作类型
@TableName varchar(50),--表名
@ActionString varchar(500),--操作语句
@WhereString varchar(500)--条件语句
as
declare @sql nvarchar(2000)
if @Type = 'Insert'
begin
set @sql='insert into ' + @TableName + ' values(' + @ActionString + ')'
end
else
if @Type = 'Update'
begin
set @sql='update ' + @TableName + ' set ' + @ActionString + ' ' + @WhereString
end
else
begin
set @sql='delete from ' + @TableName + ' ' + @WhereString
end
exec sp_executesql @sql

--调用--
exec hdpt_InsertUpdateDelete 'Update','HDPT_WebManage','Email=11,Pwd=22','where id=18'

这样调用很正常,但是 'Email=11,Pwd=22' 这个值不能是字符型,比如把'Email=aa,Pwd=bb' 就会报错了!!
--错误提示--
服务器: 消息 207,级别 16,状态 3,行 1
直接在查询

这实际上是一个数据类型处理不当的问题
比如 你 执行语句 select 123 这是可以的
select abc 他就出现和你一样的错误
你必须 select 'abc' 才行 varchar类型的数据 必须用单引号引起来 sql才能把他当成是数据 而不是列名

而你这个问题 只要在调用存储过程的时候 改一下就好了

exec hdpt_InsertUpdateDelete 'Update','HDPT_WebManage',"Email='11',Pwd='22'",'where id=18'

或者
exec hdpt_InsertUpdateDelete 'Update','HDPT_WebManage','Email=''11'',Pwd=''22''','where id=18'

就可以了

--字符型两边要加单引号
--给你加个print @sql便于查看结果
--创建过程
create proc hdpt_InsertUpdateDelete
@Type varchar(50),--动作类型
@TableName varchar(50),--表名
@ActionString varchar(500),--操作语句
@WhereString varchar(500)--条件语句
as
declare @sql nvarchar(2000)
if @Type = 'Insert'
begin
set @sql='insert into ' + @TableName + ' values(' + @ActionString + ')'