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

时间:2012-08-29 05:50:11

标签: sql-server-2008 tsql tfs2010

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

干杯, 乔

2 个答案:

答案 0 :(得分:1)

VS使用SQLCMD部署了

.dbproj个项目,因此您可以使用SQLCmd scripting variables

例如:

CREATE PROC MyProc
AS
   SELECT * FROM $(ServerVar).$(DbVar).dbo.MyTable

您可以在.dbproj中的Properties/Database.sqlcmdvars下的VS中设置这些。

然后在部署时将这些变量替换为.sql脚本。

http://msdn.microsoft.com/en-us/library/ms188714.aspx

答案 1 :(得分:0)

如果您使用了大量动态SQL,我建议您编写自己的SP来执行代码 - 并通过VARCHAR(MAX)输入参数将其传递给SP。然后使用占位符而不是数据库名称 - 有点像#DBNAME#,并且在执行代码之前在SP中添加一个实际写入真实数据库名称的REPLACE。并且您将数据库名称保存在参数表中,以便您的SP可以通过查询全局变量@@ SERVERNAME来找出哪个是正确的数据库名称。这样做的好处是可以在每个环境中运行完全相同的代码,以及我在博客中描述的其他好处。 https://wordpress.com/post/dimensionalmodelingblog.wordpress.com/92