是否可以在引用另一个项目的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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...