【问题标题】:Sql Stored Procedure to insert and updateSql 存储过程插入和更新
【发布时间】:2014-11-12 16:43:56
【问题描述】:

我是存储过程和 SQL 的新手。查看各种文章,我发现了如何使用存储过程插入记录并且它有效。

CREATE PROCEDURE  [dbo].[stprOrder]
    @OrderDate date,
    @OrderID nchar(50),
    @ShipToID nchar(50),
    @TotalAmt  decimal(18,2),
AS
BEGIN

    SET NOCOUNT ON;
    INSERT INTO ORDER(OrderDate,OrderID,ShipToID,TotalAmt)
    Values(@OrderDate,@OrderID,@ShipToID,@TotalAmt)
END

我不确定如何使用相同的stprOrder 存储过程更新记录。就像存储过程应该根据OrderID 进行插入和更新一样。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    您很可能正在寻找类似的东西

    CREATE PROCEDURE  [dbo].[stprOrder]
    
     @OrderDate date,
     @OrderID nchar(50),
     @ShipToID nchar(50),
     @TotalAmt  decimal(18,2),
    AS
    BEGIN
      SET NOCOUNT ON;
    
      IF (SELECT TOP (1) 1 FROM ORDER WHERE OrderID = @OrderID) IS NULL
         INSERT INTO ORDER(OrderDate,OrderID,ShipToID,TotalAmt)
         Values(@OrderDate,@OrderID,@ShipToID,@TotalAmt)
      ELSE
        UPDATE ORDER SET OrderDate = @OrderDate, ShipToID = @ShipToID, TotalAmt = @TotalAmt
        WHERE OrderID = @OrderID
    END
    

    首先它检查具有给定 ID 的订单是否已经存在 - 如果不存在 - 创建一个新条目,否则更新现有记录

    【讨论】:

      【解决方案2】:
      CREATE PROCEDURE  [dbo].[stprOrder]
      
       @OrderDate date,
       @OrderID nchar(50),
       @ShipToID nchar(50),
       @TotalAmt  decimal(18,2),
      AS
      BEGIN
      
        SET NOCOUNT ON;
      
        IF EXISTS (SELECT null FROM ORDER WHERE id = @orderID)
         BEGIN
             UPDATE ORDER SET ..... WHERE id = @orderID
         END
      ELSE
      BEGIN
         INSERT INTO ORDER(OrderDate,OrderID,ShipToID,TotalAmt)
         VALUES(@OrderDate,@OrderID,@ShipToID,@TotalAmt)
      END
      

      【讨论】:

        猜你喜欢
        • 2017-12-02
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2022-07-30
        • 1970-01-01
        相关资源
        最近更新 更多