1

我正在尝试找到一种方法来根据使用的发布配置文件或 sqlcmd 变量更改数据库对象。具体来说,如果我将数据库项目部署到服务器 A & B;在服务器 AI 上需要一个版本的存储过程,在服务器 BI 上需要不同版本的存储过程。出于依赖性原因,存储过程在两台服务器上必须具有相同的名称。我知道一种使用部署后脚本和动态 sql 的方法。我正在寻找更好的选择。

4

1 回答 1

0

我不确定它是否适用于问题启动器,但它可能会对某人有所帮助。您可以执行以下操作:

  1. 创建变量,例如 $(DeployType) 并将其设置为所有发布配置中的唯一值

  2. 使用以下代码更改您的数据库:

.

 CREATE PROCEDURE p_test 
  AS
 BEGIN
 IF '$(DeployType)' = 'Production'
  BEGIN
 /*Your code for production database*/
 END
 IF '$(DeployType)' = 'Dev'
  BEGIN
 /*Your code for devdatabase*/
  END
  END

在那种情况下,它应该正是你想要的。使用视图/功能,您可以执行以下操作:

CREATE VIEW v_test AS
SELECT 1
FROM table 
WHERE '$(DeployType)' = 'Production'
UNION ALL
SELECT 1
FROM table2 
WHERE '$(DeployType)' = 'Dev'

当优化器检查 WHERE 条件并看到联合的 1 部分始终为 NULL 时,性能不应该降低,因此它不会执行它。

于 2015-03-12T13:00:12.647 回答