微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在引用另一个项目的SQL项目中覆盖存储过程?

如何解决是否可以在引用另一个项目的SQL项目中覆盖存储过程?

我有一个具有核心数据库自定义数据库的旧式数据库解决方案。这是通过sql比较以手动方式进行部署的,我想将其更改为使用DacPac进行部署。

核心数据库项目包含所有公用表,存储过程等。 定制数据库适用于引用核心数据库项目的特定客户。

我想做的是在核心数据库项目中覆盖/替换存储过程以包括这些自定义(SP名称和参数相同,但存储过程主体不同),但是当我尝试使用Visual Studio显示sql71508: The model already has an element that has the same name错误。可以覆盖吗?

我要避免的是对基本SP进行编码,以检查“ override” sp的存在,并调用它,因为存在许多override和许多客户。谢谢。

解决方法

如果您的客户可以访问后端,并且由于某些原因您确实不希望该客户看到核心代码,则可以使用post deployment script创建一个scripting variable:>

Scripts.PostDeployment.sql:

:setvar customerName "customCustomer"

if $(customerName) = 'customCustomer'
    exec ('alter procedure dbo.someProc as ...');

但是我不认为这通常是必要的。我不会掩盖复杂性:

create procedure dbo.someProc
as

declare @customer nvarchar(255) = (select customerName from dbo.currentCustomer);

if @customer = 'customCustomer'
begin
    ...
end

else 
begin
    ...
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。