如何按顺序 运行 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 从那时起回滚事务。
我要在一个存储过程中执行三个操作。问题是如果上一个动作完成,我需要确保动作被执行。
例如:动作 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 从那时起回滚事务。