0

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

干杯,乔

4

2 回答 2

1

.dbprojVS 使用SQLCMD部署项目,因此您可以使用SQLCmd 脚本变量

例如:

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

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

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

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

于 2012-08-29T06:01:48.637 回答
0

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

于 2017-11-01T20:45:39.237 回答