我有一个简单的 SQL 文件用于执行一些测试:
DECLARE @VAR1 AS VARCHAR(100) = '12345'
DECLARE @VAR2 AS INTEGER = 54321
WAITFOR DELAY '00:00:02'
INSERT Orders SELECT @VAR1 AS COL1, @VAR2 AS COL2, ...
...
在启动所有这些之前,我想做一些清洁工作:
/* Clean SpecialSubSubEntries */
DELETE SpecialSubSubEntries
WHERE Id IN (SELECT Id FROM SubSubEntries
WHERE SubEntryId IN (SELECT Id FROM SubEntries
WHERE EntryId IN (SELECT Id FROM Entries
WHERE Name='ENTRY01')
)
)
DELETE SubSubEntries
WHERE SubEntryId IN (SELECT Id FROM SubEntries
WHERE EntryId IN (SELECT Id FROM Entries
WHERE Name='ENTRY01')
)
...
出于可读性的原因,我想将所有清理命令放在一个文件“cleanup.sql”中,并在我的 SQL 文件的开头启动它。我该怎么做这样的事情?
我想它是这样的:
EXECUTE ".\cleanup.sql"
...但我不确定语法。
您可以从 T-SQL/SSMS 内部执行 SQLCMD。在此处查看答案:如何从 SSMS 中执行一组 .SQL 文件?
您需要将查询窗口设置为 SQLCMD 模式。这是一个要求,它是为您工作的客户端工具,而不是数据库引擎。要启用此模式,请单击菜单栏中的查询,然后选择 SQLCMD 模式。
对于纯 T-SQL 解决方案,我刚刚测试了下面的代码,它就像一个魅力:
重要说明:除非您非常清楚其背后的风险,否则不建议使用此方法。
xp_cmdshell
正如 Microsoft建议的那样,该脚本在执行后禁用。.sql
通常,从硬盘驱动器读取另一个.sql
文件中的文件是一种反模式。相反,最好创建一个存储过程:之后,你可以像这样在sql中的任意位置执行它:
--
如果您仍然需要它,那么这样做更正确:
--
笔记
Microsoft不建议使用该
xp_cmdshell
过程。这是不安全的。