none
SQL 存储过程 RRS feed

  • 问题

  • CREATE PROCEDURE tb_UserSelect
    @UserID nvarchar(50),
    @UserName nvarchar(50),
    @UserPwd nvarchar (50)
     AS
    SELECT UserID,UserName,UserPwd FROM tb_User WHERE UserID=@UserID AND UserPwd=@UserPwd
    GO

    我需要返回 UserID,UserName这两个字段的值,有人能教教我吗?
    2009年11月23日 2:48

答案


  • CREATE PROCEDURE tb_UserSelect
    (
        @UserID nvarchar(50) output,
        @UserName nvarchar(50)=null output,
        @UserPwd nvarchar (50)
    )
    AS
    --賦值
    select @UserName=UserName
    FROM tb_User
    WHERE UserID=@UserID AND UserPwd=@UserPwd
    GO
    --調用
    declare @UserID nvarchar(50) ,@UserName nvarchar(50)
    set @UserID='0001'
    exec tb_UserSelect @UserID output,@UserName output,@UserPwd='password'
    
    select @UserID,@UserName
    

    用DataTable獲取結果集,篩選要的列

    --加上Output就行了
    樓主的用法存在誤用,參數UserID是傳入根本就不用再通過存儲過程再返回

    ROY WU(吳熹 )
    2009年11月23日 9:01
    版主
  • c#方法很多!
    如果是我说的第一种:
    那么你直接用 sqlprameter sp={};
    这个地方你的输入参数 执行后去取 int id=int.parse(sp["userid"].tostring())
    如果是第二种:
    你可以将查询的结果用dataset来保存
    dataset ds=(查询的调用);
    if(ds.tables[0].rows.count>0)
    {
    string userpwd=ds.tables[0].rows[0]["BackStr"].split(',')[1]
    sring userid=ds.tables[0].rows[0]["BackStr"].split(',')[0]
    }
    2009年11月23日 9:18

全部回复

  • 这样写有语法错误,没有使用EXISTS引入子查询,列表中只能指定一个表达式,而我有两个条件,必须在满足的情况下才能返回个C#

    我算是个初学者,这个问题对我来说很重要,希望能不吝赐教。谢谢!
    2009年11月23日 3:13
  • 方法很多
      你可以使用带输出的存储过程
      CREATE PROCEDURE tb_UserSelect
    @UserID nvarchar(50),
    @UserName nvarchar(50),
    @UserPwd nvarchar (50),
    @OutUser  INT output,
    @OutPWD nvarchar (50) output,
    SELECT @OutUser =UserID,UserName,@OutPWD=UserPwd FROM tb_User WHERE UserID=@UserID AND UserPwd=@UserPwd
    GO

    然后在程序里面去取
    或者更简单的办法就是
    CREATE PROCEDURE tb_UserSelect
    @UserID nvarchar(50),
    @UserName nvarchar(50),
    @UserPwd nvarchar (50)
     AS
    SELECT UserID,UserName,UserPwd,(cast(UserID as varchar(20))+','+UserPwd)  as BackStr FROM tb_User WHERE UserID=@UserID AND UserPwd=@UserPwd
    GO


    取的BackStr的值 然后以 ,来分割  第一个是id 第二个是密码
    2009年11月23日 3:41
  • 请问,能教我怎么从C#中获得以上的值吗?

    2009年11月23日 7:51

  • CREATE PROCEDURE tb_UserSelect
    (
        @UserID nvarchar(50) output,
        @UserName nvarchar(50)=null output,
        @UserPwd nvarchar (50)
    )
    AS
    --賦值
    select @UserName=UserName
    FROM tb_User
    WHERE UserID=@UserID AND UserPwd=@UserPwd
    GO
    --調用
    declare @UserID nvarchar(50) ,@UserName nvarchar(50)
    set @UserID='0001'
    exec tb_UserSelect @UserID output,@UserName output,@UserPwd='password'
    
    select @UserID,@UserName
    

    用DataTable獲取結果集,篩選要的列

    --加上Output就行了
    樓主的用法存在誤用,參數UserID是傳入根本就不用再通過存儲過程再返回

    ROY WU(吳熹 )
    2009年11月23日 9:01
    版主
  • c#方法很多!
    如果是我说的第一种:
    那么你直接用 sqlprameter sp={};
    这个地方你的输入参数 执行后去取 int id=int.parse(sp["userid"].tostring())
    如果是第二种:
    你可以将查询的结果用dataset来保存
    dataset ds=(查询的调用);
    if(ds.tables[0].rows.count>0)
    {
    string userpwd=ds.tables[0].rows[0]["BackStr"].split(',')[1]
    sring userid=ds.tables[0].rows[0]["BackStr"].split(',')[0]
    }
    2009年11月23日 9:18
  • 非常感谢你的指导使我学会了不少好东西,谢谢!

    2009年11月24日 1:31
  • 谢谢版主给我上了一课,至少现在我会写个简单的SQL存储过程获取参数的脚本代码了,谢谢!

    2009年11月24日 1:32