SQL Server中是否有“包含文件”的概念?


19

我有一组需要按特定顺序运行的脚本。我想创建一个“主文件”,其中列出了所有其他文件及其正确顺序。基本上就像来自C ++或ASP / VBScript的包含文件。

Answers:


19

如果使用的是SQLCMD,则可以使用它:r FileName来包含一个单独的.sql文件。

:r文件名

将FileName指定的文件中的其他T-SQL语句和SQLCMD命令解析到语句缓存中。相对于Visual Studio的启动目录读取FileName。遇到批处理终止符后,将读取并执行该文件。您可以发出多个:r命令。该文件可以包括任何SQLCMD命令,包括在“工具”,“选项”中定义的批处理终止符。您可以在部署前或部署后脚本中使用:r来包含其他脚本。


您是否正在使用此功能?
bernd_k 2012年

我在SQL Server数据工具项目中大量使用它。当我尝试组织作为后脚本运行的示例数据时,这确实有帮助。
乔纳森·艾伦

4

在古代的C预处理器的意义上绝对没有

  • T-SQL本身没有这样的概念
  • SSMS的sqlcmd和sqlcmdmode不处理相对文件路径
  • SSMS的sqlcmd和sqlcmdmode不支持条件包括

如果要使用无条件顺序包含一组具有给定绝对路径的文件,则可以使用命令行工具sqlcmd或在sqlcmdmode中使用SSMS,如@mfredrickson和@Marian所述。


但是,如果要相对路径或条件包括,则需要使用一些包装程序调用sqlcmd(或其不推荐使用的前任之一isql或osql)。

目前,在这种情况下,我正在审查和扩展旧的vb和hta代码。我并不完全高兴,但这是一个务实的决定。它可以正常工作,并且最终用户可以使用hta GUI在家,而无需安装其他软件。

对于全新的设计,我将开始考虑使用WPF和PowerShell包装对sqlcmd的调用,但是对于我们目前的客户,我无法假定PowerShell V2的存在。

在以前,我们为此目的编写了简单的cmd批处理,其中有些仍在使用中。

我想目前有一些工具,尤其是那些针对工作流程的工具,可能在这里很合适。我不熟悉这些。


3

与Management Studio中的SQLCMD模式一起,您还可以使用批处理文件作为主文件,以通过使用SQLCMD实用程序来排列和调用所有sql文件。

SQLCMD模式是Management Studio内部实用程序使用情况的模拟,因此这两种模式之间没有太大差异。除了有时我更喜欢运行批处理(不再打开M Studio ...加载正确的数据库...等)。我更喜欢配置批处理中的所有内容,包括输出文件。


2

我同意,非常需要T-SQL预处理程序。我用C#开发了自己的程序,这花了我一个小时的时间。除了控制SQL脚本的执行顺序外,它还允许我拥有看起来像标量UDF的宏,并且使用起来很方便,但执行速度与内联UDF一样快。


+1-在很多情况下,我都使用模板工具完成了这类工作。尽管sqlcmd具有一些用于变量替换的功能,但我还是给那些为SSMS实现了不错的宏预处理程序插件的人深深地吸引了我。
ConcernedOfTunbridgeWells

1
@AK,您介意对此进行详细说明吗?也许在github上发布一些代码?
克雷格2014年

2

我喜欢bernd_k的回答。如果您运行的是SQL Server 2008或更高版本,则可以使用SQL Server PowerShell(SQLPS),具体取决于脚本的命名方式(包括数字)。然后,即使您使用的是SQL 2005,也可以使用PowerShell和2005的SMO。

旁注:我相信SQLCMD最终将被列入折旧清单,并将被SQLPS,PowerShell取代。

还有其他一些选择。

  1. 将每个脚本设置为SQL Agent作业中的步骤。您可以设置它们的执行顺序。
  2. 创建一个SSIS包以调用每个文件。这样可以提供更多控制权,并提供更多日志记录选项。如果需要在执行下一个脚本之前验证一个脚本的结果,则我喜欢这种方法。

我认为SQLCMD不会贬值,因为它对于SQL Server数据工具和DACPAC的工作方式至关重要。
乔纳森·艾伦

@JonathanAllen如果您碰巧发现任何显示使用DACPAC进行管理的当前文档,请SQLCMD告诉我,因为我发现的大部分内容都引用了PowerShellsqlcmd除了可能用于模式比较之外,我还没有看到与SSDT一起使用的参考,但是我从不使用生成的脚本。
肖恩·梅尔顿

SSDT脚本是sqlcmd脚本。这样便可以处理用户定义的参数以及数据库名称之类的参数。如果要使用SqlPackage.exe部署DACPAC,则此链接显示了如何传递sqlcmd参数。msdn.microsoft.com/zh-cn/…–
乔纳森·艾伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.