【问题标题】:How to write this stored procedure for SQL Server?如何为 SQL Server 编写这个存储过程?
【发布时间】:2017-03-08 14:01:19
【问题描述】:

如何为 SQL Server 写下这个存储过程?

显示此错误:

消息 137,第 15 级,状态 2,第 2 行 必须声明标量变量“@name”。

update login 
        set reg.name=@name
            reg.phone=@phone
            login.email_id=@email_id
            login.pwd=@pwd
            login.role=@role
    from  login  INNER JOIN reg on reg.r_id=login.l_id
    where reg.r_id=@ID

请帮忙解决这个问题。

【问题讨论】:

  • 正确的语法取决于您使用的数据库,即...?
  • 多表连接语法取决于数据库;您应该添加标签以指示您正在使用的数据库。此外,您应该将问题格式化为可读;知道答案的人很有可能不会花时间尝试按原样阅读它。
  • 您使用的是什么 DBMS?
  • sql server 2010
  • 检查我的更新答案!!!我已经解决了这个问题

标签: java sql sql-server


【解决方案1】:

试试这个

update login 
        set reg.name=@name,
        reg.phone=@phone,
        login.email_id=@email_id,
        login.pwd=@pwd,
        login.role=@role 
    from  login  INNER JOIN reg on reg.r_id=login.l_id
    where reg.r_id=@ID`

【讨论】:

  • 更新登录集 reg.name=@name reg.phone=@phone login.email_id=@email_id login.pwd=@pwd login.role=@role from login INNER JOIN reg on reg.r_id =login.l_id 其中 reg.r_id=@ID
  • Msg 137, Level 15, State 2, Line 2 必须声明标量变量“@name”。
  • 再次重复这个错误,我被输入逗号并再次检查错误
  • 更新登录集 reg.name=@name, reg.phone=@phone, login.email_id=@email_id, login.pwd=@pwd, login.role=@role from login INNER JOIN reg在 reg.r_id=login.l_id 上 reg.r_id=@ID
  • Msg 137, Level 15, State 2, Line 2 必须声明标量变量“@name”。
【解决方案2】:

您不能使用单个 SQL 语句更新多个表中的列。 这样做的一种方法是创建使用多个更新语句来更新多个表的存储过程。 例如:

CREATE PROCEDURE p_UpdateLogin
(
    @id         INTEGER,
    @name       VARCHAR(10),
    @phone      VARCHAR(10),
    @email_id   VARCHAR(100),
    @pwd        VARCHAR(20), 
    @role       NVARCHAR(20)
)
AS
BEGIN
    BEGIN TRANSACTION [Tran1]
    BEGIN TRY
        UPDATE login 
           SET login.email_id = @email_id,
               login.pwd      = @pwd,
               login.role     = @role
          FROM login
               INNER JOIN reg
                 ON login.[l_id] = reg.[r_id]
         WHERE reg.[r_id] = @id

        UPDATE reg 
           SET reg.name     = @name,
               reg.phone    = @pwd
         WHERE reg.[r_id] = @id

    COMMIT TRANSACTION [Tran1]
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION [Tran1]
    END CATCH   
END

使用下面的查询来执行存储过程:

EXEC dbo.p_UpdateLogin @id = 50, @name = 'Saurabh',
     @phone = '1234567890', @email_id = 'demo@email.com',
     @pwd = '******', @role = 'Super';

【讨论】:

  • 我正在使用这个示例并执行这个存储过程在 reg 表中更新但在登录表中未更新
  • 存储过程工作正常。我已经在我的数据库中尝试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2016-03-30
  • 1970-01-01
  • 2010-11-06
  • 2012-01-17
  • 2020-10-12
  • 2012-06-16
相关资源
最近更新 更多