首页 新闻 会员 周边

存储过程中奇怪的参数问题

0
悬赏园豆:10 [待解决问题]

存储过程如下:

CREATE PROCEDURE [dbo].[P_Public_ModOne] 

 (

@id INT,

@table VARCHAR(50),

@key VARCHAR(50),

@filed VARCHAR(50),

@values VARCHAR(50)

)

AS

BEGIN

DECLARE @sql VARCHAR(8000)

SET @sql = 'UPDATE ['+ @table +'] SET ['+ @filed +'] = '+ CAST(@values  AS VARCHAR(50)) +'  WHERE ['+ @key +'] = '+ CAST(@id AS VARCHAR(10)) +''

EXEC(@sql)

END

数据表如下:

create table users

(

u_id int identity(1,1),

u_name varchar(50)

)

执行存储过程如下:
exec P_Public_ModOne 1,'users','u_id','u_name','123'

这个语句没有问题,但是下面的语句问题出现了:

exec P_Public_ModOne 1,'users','u_id','u_name','sa'

提示错误:列名'sa'无效!

两条语句的区别在于:

前者是要把u_name改为数字'123',后者则是把u_name改为字母'sa'.

百思不得其解,不知道问题在哪里,特来求教!!!

于无声处的主页 于无声处 | 初学一级 | 园豆:190
提问于:2010-11-27 10:30
< >
分享
所有回答(2)
0

exec P_Public_ModOne 1,'users','u_id','u_name','''sa'''

试试

写代码的小2B | 园豆:4371 (老鸟四级) | 2010-11-27 10:54
呵呵,已经解决了,你的这个解决办法是治标不治本,完美的做法应该是这样: 修改存储过程入下: Alter PROCEDURE [dbo].[P_Public_ModOne] ( @id INT, @table VARCHAR(50), @key VARCHAR(50), @filed VARCHAR(50), @values VARCHAR(50) ) AS BEGIN DECLARE @sql VARCHAR(8000) SET @sql = 'UPDATE ['+ @table +'] SET ['+ @filed +'] = '''+ CAST(@values AS VARCHAR) +''' WHERE ['+ @key +'] = '+ CAST(@id AS VARCHAR(10)) +'' EXEC(@sql) END
支持(0) 反对(0) 于无声处 | 园豆:190 (初学一级) | 2010-11-27 10:59
额··· 可以结贴了
支持(0) 反对(0) 写代码的小2B | 园豆:4371 (老鸟四级) | 2010-11-27 11:15
0

是的.已经是Varchar类型了,不需要再做转换

Seven_One | 园豆:210 (菜鸟二级) | 2010-12-01 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册