Dom*_*que 3 sql-server t-sql external-scripts
我有一个简单的 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, ...
...
Run Code Online (Sandbox Code Playgroud)
在启动这一切之前,我想做一些清理工作:
/* 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')
)
...
Run Code Online (Sandbox Code Playgroud)
出于可读性原因,我想将所有清理命令放入文件“cleanup.sql”中,并在 SQL 文件的开头启动它。我该如何做这样的事情?
我想是这样的:
EXECUTE ".\cleanup.sql"
Run Code Online (Sandbox Code Playgroud)
...但我不确定语法。
您可以从 SSMS 中以 SQLCMD 模式执行脚本。请参阅此处的答案:How can I execute a set of .SQL files from inside SSMS?
为此,您需要将 SSMS 查询设置为 SQLCMD 模式,翻译该代码的是客户端工具,而不是数据库引擎。Query
要启用此模式,请在 SSMS 中下拉菜单,然后选择SQLCMD Mode
。
我提供了一个纯粹的 T-SQL 解决方案,没有任何麻烦,它经过测试并且工作得非常顺利:
重要提示:除非您非常了解其背后的风险,否则不建议使用此方法。xp_cmdshell
该脚本在执行后启用然后禁用,如 Microsoft此处建议的那样。
如果必须使用 xp_cmdshell,作为安全最佳实践,建议仅在需要它的实际任务期间启用它。
exec sp_configure 'show advanced options',1;reconfigure with override;
exec sp_configure 'xp_cmdshell',1;reconfigure with override;
declare @sqlfile nvarchar(100),@sqlcmd varchar(4000)
exec xp_cmdshell 'del c:\SQLscript.sql && echo SELECT ''This Is a script running on SQLCMD from SSMS'' DataColumn >> c:\SQLscript.sql',no_output --test script
set @sqlfile = 'c:\SQLscript.sql' --script location
set @sqlcmd = 'sqlcmd -E -i '+@sqlfile
/* the above string runs sqlcmd on the server which sqlcmd was invoked, and with trusted connection,
if you need to run the script on a different server/instance, you'll need replace the "-E" with "-S" and specify servername/ip address and credentials with "-U" for username and "-P" for password*/
exec xp_cmdshell @sqlcmd --executing script
exec sp_configure 'xp_cmdshell',0;reconfigure with override;
exec sp_configure 'show advanced options',0;reconfigure with override;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2722 次 |
最近记录: |