我正在尝试根据使用的发布配置文件或sqlcmd变量找到更改数据库对象的方法。具体来说,如果我将数据库项目部署到服务器A& B;在服务器A上我想要一个版本的存储过程,在服务器B上我想要一个不同版本的存储过程。出于依赖性原因,存储过程在两个服务器上必须具有相同的名称。我知道使用后部署脚本和动态sql的方法。我正在寻找更好的选择。
答案 0 :(得分:0)
我不确定这对于问题启动者是否真实,但它可能对某人有所帮助。你可以这样做:
创建变量,例如$(DeployType)并将其设置为唯一 所有出版配置中的价值
使用以下代码更改您的数据库:
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部分的union将总是为NULL,因此它不会执行它。