如何按顺序 运行 sql 脚本?

How to run sql scripts sequentially?

我要在一个存储过程中执行三个操作。问题是如果上一个动作完成,我需要确保动作被执行。

例如:动作 2 必须在 动作 1 完成后开始执行。

请指教如何实现才能达到上述效果。

代码:

操作 - 1

UPDATE Products 
SET MarkDownPrice = price + adjustment, 
    MarkDownDate = startdate, MarkedDown = 1
FROM Products p
JOIN PriceChanges pc ON p.SKU = pc.SKU and dateprocessed is null
WHERE pc.SKU = @SKU

动作 - 2

UPDATE StyleColour 
SET isDirty = 1
FROM StyleColour sc
JOIN Products p ON sc.styleID = p.merretStyleID AND sc.Colour = p.MerretColour
WHERE SKU = @SKU

动作 - 3

UPDATE pricechanges 
SET dateProcessed = getdate()
WHERE SKU = @SKU and dateprocessed is null

有两种方法可以实现。

  • 在每个语句之后使用@@error 变量并检查它的非零值(我认为这不是最好的方法)这意味着发生了错误所以你只是 return 从那个指向回滚你的交易。
  • 使用 Try catch.. 类似的东西:

    BEGIN TRY
    { sql_statement |
      statement_block }
    END TRY
    BEGIN CATCH
    { sql_statement |
      statement_block }
    END CATCH
    

    如果发现任何错误,只需 return 从那时起回滚事务。