【问题标题】:How to insert to a data into a table after deleting a row with the same primary key?删除具有相同主键的行后如何将数据插入表中?
【发布时间】:2017-01-13 14:00:18
【问题描述】:

我有一个存储过程来更新单独表中的记录。对于此任务,首先我删除与该主键相关的所有记录。然后运行插入查询。但是当我这样做时,我会在 SQL Server 中得到一个错误。

这里是存储过程

ALTER PROCEDURE [dbo].[update_HS_HR_LANG]
    @appNo Int,
    @LCODE VARCHAR(30),
    @ABILITY int
AS
BEGIN
    DELETE FROM [HS_HR_LANG]
    WHERE App_no = @appNo
END
BEGIN
    INSERT INTO [HS_HR_LANG] ([App_no], [lang_code], [ability_type])
    VALUES (@appNo, @LCODE, @ABILITY)
END                              

这是我得到的错误

必须声明标量变量“@appNo”

【问题讨论】:

  • 去掉中间的end begin
  • @artm 成功了

标签: sql-server stored-procedures


【解决方案1】:

您的存储过程到此结束:

ALTER PROCEDURE [dbo].[update_HS_HR_LANG]
@appNo Int,
@LCODE VARCHAR(30),
@ABILITY int

AS

BEGIN

DELETE 
FROM [HS_HR_LANG]
WHERE App_no=@appNo

END -- <-----HERE

您稍后会访问@appNo,因此您会收到错误消息。

因此,您应该改为:

ALTER PROCEDURE [dbo].[update_HS_HR_LANG]
@appNo Int,
@LCODE VARCHAR(30),
@ABILITY int

AS

BEGIN -- <----- START

DELETE 
FROM [HS_HR_LANG]
WHERE App_no=@appNo

insert into [HS_HR_LANG]
([App_no]
,[lang_code]
,[ability_type])
 VALUES
       (@appNo,
        @LCODE,
        @ABILITY)
END  -- <----- END

【讨论】:

    【解决方案2】:
    ALTER PROCEDURE [dbo].[update_HS_HR_LANG]
     @appNo Int,
     @LCODE VARCHAR(30),
     @ABILITY int
    
     AS
    
     BEGIN --<--start begin from here and remove the begin,end in the middle---
    
     DELETE 
     FROM [HS_HR_LANG]
     WHERE App_no=@appNo
    
     insert into [HS_HR_LANG]
     ([App_no]
    ,[lang_code]
    ,[ability_type])
     VALUES
       (@appNo,
        @LCODE,
        @ABILITY)
        END  -- <---------
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2021-11-30
      • 2019-05-25
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多