【发布时间】:2017-03-27 08:55:00
【问题描述】:
我有一个包含超过 150k 行语句的 sql 脚本(其中大部分是插入语句)。如果表为空,我只想执行这些插入:
IF EXISTS (SELECT * FROM [MyTable])
BEGIN
PRINT 'No need to insert data'
--Stop executing script
END
ELSE
BEGIN
--INSERT #1
--...
--Insert #150000
END
问题:ELSE 块似乎太大了。我尝试使用GO,但它在 BEGIN-END 块中不起作用。我该如何解决这个问题?
【问题讨论】:
-
我会将它分成两部分来解决:脚本的第一部分将简单地将您的数据插入临时表中。然后,如果 `[MyTable]` 为空,则从临时表中选择数据到目标表中。
-
好主意,谢谢!问题是,这将需要大量时间来修改所有脚本(目前太多时间)。但我会记住这一点,如果我没有找到任何其他方法:)
-
另一种选择是创建一个包含所有插入语句的存储过程,然后在 else 块中简单地执行它。
-
没有简单的方法来重构代码。您能做的最好的事情是使用 Notepad ++ 来替换类似 Replace
INSERTwith\r\nEND\r\nIF EXISTS (SELECT * FROM Nonexistingtable)\r\nBEGIN\r\n PRINT 'No need to insert data'\r\n --Stop executing script\r\nEND\r\nELSE\r\nBEGIN\r\nINSERT的字符串。请确保在替换选项卡中扩展搜索模式。您仍然需要手动将 Nonexistingtable 替换为正确的表。可以再次使用 Notepad++ 提供帮助,方法是搜索 Nonexistingtable 并单击查找选项卡下的“在文档中查找所有内容”。希望对你有帮助
标签: sql sql-server tsql sql-server-express