您的位置:首页 > 其它

写存储过程中遇到的简单但是容易忽略的问题

2006-09-05 16:08 429 查看
今天写了一个简单的存储过程,但是确因为一个小问题怎么也不能得到正确的结果。今天记下来,希望能提醒健忘的自己和帮助那些可能被这些小而容易忽略的问题弄得郁闷的人们。

下面列举出来的就是我的存储过程执行的对象表的表结构。

username varchar (50) (Primary Key)

password varchar (50)

其中username是表的主键。在表中存在一条记录如下:

username password

vividboy 123456

下面就是出错的存储过程:




ALTER PROCEDURE dbo.GetUserInfoByName


(




/**//*@paramName [paramType]*/


@username varchar --这里必须是数据库的类型,比如这里没有string型对应的可以选择varchar,char型等。


)


AS


SELECT username, roles FROM users WHERE username=@username




RETURN

在调用的时候,我传入"vividboy",正常的结果应该是找到一条记录。但是实际情况是,没有找到任何记录。

在 查询分析器 中测试存储过程的时候,发现@username的属性为varchar(1),这样我的原意是username="vividboy"但由于@username默认的类型是varchar(1),长度不够,那么实际上就是@username="v",那么在表格中没有这个记录,自然就没有返回值了。将@username varchar 修改成 @username varchar(50)然后再进行测试,结果正常。修改后存储过程是:


CREATE PROCEDURE dbo.GetUserInfoByName


(




/**//*@paramName [paramType]*/


@username varchar(50) --这里必须是数据库的类型,比如这里没有string型对应的可以选择varchar,char型等。


)


AS




/**//* SET NOCOUNT ON */


SELECT username, roles FROM users WHERE username=@username




RETURN


GO



P.S. 这里还顺带的说一下。很多时候我们打开SQL查询分析器,不小心关掉了左边的“对象浏览器”,要重新打开对象浏览器,仅需要“工具”--> “对象浏览器” --> “显示/隐藏”就可以了。

【注】这里要谢谢我两位可爱的学弟 弋政 和 肖海军
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: