Answers:
如果使用的是SQLCMD,则可以使用它:r FileName
来包含一个单独的.sql文件。
:r文件名
将FileName指定的文件中的其他T-SQL语句和SQLCMD命令解析到语句缓存中。相对于Visual Studio的启动目录读取FileName。遇到批处理终止符后,将读取并执行该文件。您可以发出多个:r命令。该文件可以包括任何SQLCMD命令,包括在“工具”,“选项”中定义的批处理终止符。您可以在部署前或部署后脚本中使用:r来包含其他脚本。
在古代的C预处理器的意义上绝对没有
如果要使用无条件顺序包含一组具有给定绝对路径的文件,则可以使用命令行工具sqlcmd或在sqlcmdmode中使用SSMS,如@mfredrickson和@Marian所述。
但是,如果要相对路径或条件包括,则需要使用一些包装程序调用sqlcmd(或其不推荐使用的前任之一isql或osql)。
目前,在这种情况下,我正在审查和扩展旧的vb和hta代码。我并不完全高兴,但这是一个务实的决定。它可以正常工作,并且最终用户可以使用hta GUI在家,而无需安装其他软件。
对于全新的设计,我将开始考虑使用WPF和PowerShell包装对sqlcmd的调用,但是对于我们目前的客户,我无法假定PowerShell V2的存在。
在以前,我们为此目的编写了简单的cmd批处理,其中有些仍在使用中。
我想目前有一些工具,尤其是那些针对工作流程的工具,可能在这里很合适。我不熟悉这些。
与Management Studio中的SQLCMD模式一起,您还可以使用批处理文件作为主文件,以通过使用SQLCMD实用程序来排列和调用所有sql文件。
SQLCMD模式是Management Studio内部实用程序使用情况的模拟,因此这两种模式之间没有太大差异。除了有时我更喜欢运行批处理(不再打开M Studio ...加载正确的数据库...等)。我更喜欢配置批处理中的所有内容,包括输出文件。
我同意,非常需要T-SQL预处理程序。我用C#开发了自己的程序,这花了我一个小时的时间。除了控制SQL脚本的执行顺序外,它还允许我拥有看起来像标量UDF的宏,并且使用起来很方便,但执行速度与内联UDF一样快。
我喜欢bernd_k的回答。如果您运行的是SQL Server 2008或更高版本,则可以使用SQL Server PowerShell(SQLPS),具体取决于脚本的命名方式(包括数字)。然后,即使您使用的是SQL 2005,也可以使用PowerShell和2005的SMO。
旁注:我相信SQLCMD最终将被列入折旧清单,并将被SQLPS,PowerShell取代。
还有其他一些选择。
SQLCMD
告诉我,因为我发现的大部分内容都引用了PowerShell。sqlcmd
除了可能用于模式比较之外,我还没有看到与SSDT一起使用的参考,但是我从不使用生成的脚本。