2017-03-08 85 views
2

如何为SQL Server写下此存储过程?示如何为SQL Server编写此存储过程?

此错误:

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

update login 
     set [email protected] 
      [email protected] 
      [email protected]_id 
      [email protected] 
      [email protected] 
    from login INNER JOIN reg on reg.r_id=login.l_id 
    where [email protected] 

请帮助解决这个问题。

+0

正确的语法取决于您所使用的数据库,这是...? –

+0

多表连接语法取决于数据库;你应该添加标签来表明你正在使用哪个数据库。你也应该将问题的格式设置为可读;知道答案的人很有可能不会花时间尝试阅读它。 –

+0

你正在使用哪些DBMS? –

回答

0

试试这个

update login 
     set [email protected], 
     [email protected], 
     [email protected]_id, 
     [email protected], 
     [email protected] 
    from login INNER JOIN reg on reg.r_id=login.l_id 
    where [email protected]` 
+0

更新登录 组[email protected]name \t \t \t [email protected] \t \t \t [email protected]_id \t \t \t [email protected] \t \t \t [email protected] 从登录INNER JOIN上reg.r_id = login.l_id reg其中[email protected] –

+0

消息137,级别15,状态2,2 行必须声明标量变量“ @名称”。 –

+0

这个错误我是显示我试过这个查询 –

0

你不能用一个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 = '[email protected]', 
    @pwd = '******', @role = 'Super'; 
+0

我正在使用这个例子并执行这个存储过程在注册表中更新但在登录表中没有更新 –

+0

不是每次都更新这两个表字段。 –

+0

存储过程工作正常。我已经在我的数据库中试过了。 –