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

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

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

   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查询分析器,不小心关掉了左边的“对象浏览器”,要重新打开对象浏览器,仅需要“工具”--> “对象浏览器” --> “显示/隐藏”就可以了。

 【注】这里要谢谢我两位可爱的学弟 弋政 和 肖海军

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值