Ran*_*ser 5 sql sql-server-2008
我有一个庞大的SQL脚本,有很多批次(使用GO).
在某些情况下,我想停止整个执行此脚本.
我尝试使用NOEXEC,但我继续获取无效的对象错误,因为我的脚本包括创建数据并将数据添加到新的表和列.
我不想使用RAISERROR,有没有其他方法可以做到这一点?
这个问题没有好的解决方案。在批次之间共享数据的一种方法是表(持久或临时)。因此,您可以拥有一些依赖于该表的某些状态或该表中特定列的值的逻辑,如下所示:
--CREATE TABLE debug(col int)
--INSERT INTO debug VALUES(1)
--DELETE FROM debug
SELECT 1
GO
SELECT 2
SELECT 3
GO
IF EXISTS(SELECT * FROM debug)
SELECT 6
GO
Run Code Online (Sandbox Code Playgroud)
只需IF EXISTS(SELECT * FROM debug)将此行添加到脚本中要跳过的每个位置,并根据表是否有某些行的事实,这些代码块是否会执行。