Если условие, чтобы определить, какие хранимые процедуры для создания - PullRequest
1 голос
/ 07 октября 2019

Это больше, чем просто проверка на существование

У меня есть скрипт, который создает 27 хранимых процедур. Мне нужно запустить этот скрипт для двух баз данных. Вторая база данных нуждается только в 25 из 27 хранимых процедур. Я надеялся обернуть мой код в оператор if, чтобы определить текущий db

Псевдо-пример:

DROP PROCEDURE IF EXISTS [A]
GO

CREATE PROCEDURE [dbo].[A]
    @CountryCode CHAR(3),
    @LanguageCode CHAR(3) = NULL,   
AS
BEGIN
...

GO

IF (DB_NAME() <> 'DB2')
BEGIN
    DROP PROCEDURE IF EXISTS [B]
    GO

    CREATE PROCEDURE [dbo].[B]
        @CountryCode CHAR(3),
        @LanguageCode CHAR(3) = NULL,   
    AS
    BEGIN
    ...

    GO

    DROP PROCEDURE IF EXISTS [C]
    GO

    CREATE PROCEDURE [dbo].[C]
        @CountryCode CHAR(3),
        @LanguageCode CHAR(3) = NULL,   
    AS
    BEGIN
    ...
    GO
END

Я знаю, что могу обернуть его в EXEC для области видимости, но при этомЯ мог бы также создать новый файл. Я видел старые вопросы, но не знал, есть ли что-то новое в SQL Server 2016/2019 для решения этой проблемы.

1 Ответ

1 голос
/ 08 октября 2019

Я бы использовал шаблон как показано ниже 1) Сначала создайте все SP 2) Отбросьте определенные:

CREATE OR ALTER PROCEDURE proc1 ...
GO

CREATE OR ALTER PROCEDURE proc2 ...
GO
...

CREATE OR ALTER PROCEDURE proc27 ...
GO

IF (DB_NAME() <> 'DB2') DROP PROCEDURE IF EXISTS proc26;
IF (DB_NAME() <> 'DB2') DROP PROCEDURE IF EXISTS proc27;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...