Sql server 2008 是否可以根据TSQL脚本部署到的数据库更改TSQL脚本?

Sql server 2008 是否可以根据TSQL脚本部署到的数据库更改TSQL脚本?,sql-server-2008,tsql,Sql Server 2008,Tsql,在c#项目中,有预处理器指令的概念,允许您根据是构建调试版本还是发布版本的app/dll/etc来更改编译的代码。TSQL脚本和DB项目是否有类似的选项?具体来说,我使用的一些TSQL脚本创建了在远程数据库中工作的动态sql语句。开发和生产需要不同的远程数据库,因此两个版本之间的动态SQL需要不同。最好不要每次在部署到dev和部署到prod之间切换时都手动更新代码 干杯, Joe.dbproj项目由VS使用部署,因此您可以使用 例如: CREATE PROC MyProc AS SELEC

在c#项目中,有预处理器指令的概念,允许您根据是构建调试版本还是发布版本的app/dll/etc来更改编译的代码。TSQL脚本和DB项目是否有类似的选项?具体来说,我使用的一些TSQL脚本创建了在远程数据库中工作的动态sql语句。开发和生产需要不同的远程数据库,因此两个版本之间的动态SQL需要不同。最好不要每次在部署到dev和部署到prod之间切换时都手动更新代码

干杯,
Joe

.dbproj
项目由VS使用部署,因此您可以使用

例如:

CREATE PROC MyProc
AS
   SELECT * FROM $(ServerVar).$(DbVar).dbo.MyTable
您可以在VS中的.dbproj中的
Properties/Database.sqlcmdvars
下设置这些

这些变量在部署时被替换到.sql脚本中


如果您使用大量动态SQL,我建议您编写自己的SP来执行代码,并通过VARCHAR(MAX)输入参数将代码传递给SP。然后使用占位符而不是数据库名,比如#DBNAME#,然后在SP中放入一个替换项,在执行代码之前实际写入真实的数据库名。您可以将数据库名保存在参数表中,这样SP就可以通过查询全局变量@@SERVERNAME(例如)来找出哪个数据库名是正确的。这样做的好处是在每个环境中运行完全相同的代码,还有我在博客中描述的其他好处