Как динамически создавать и изменять в сценарии SQL? - PullRequest
0 голосов
/ 27 марта 2019

Как динамически создавать и изменять в сценарии SQL?

Вместо того, чтобы иметь если выходит - бросьте мы ищем если выходит - измени.

Как справиться с таким сценарием.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Чтобы пояснить мои комментарии выше, SQL Server 2016 с пакетом обновления 1 (SP1) выпустил оператор CREATE OR ALTER, который либо создаст объект, который еще не существует, либо изменит объект, если он это сделает. Это разрешено только для определенных объектов, таких как хранимые процедуры, триггеры, функции и представления. Таблицы, индексы и другие объекты, выделенные для хранения, не могут использоваться в операторе CREATE OR ALTER. Также обратите внимание, что, поскольку они сохраняются на диске, представления индексов не могут использоваться этим. Базовый пример синтаксиса приведен ниже.

CREATE OR ALTER PROCEDURE SP_TestStoredProcedure 
AS 
BEGIN
SELECT
    Column1,
    Column2,
    Column3
FROM YourTable
END
1 голос
/ 27 марта 2019

Вот трюк, который я использовал.

-- for testing, not needed for real -- DROP PROCEDURE dbo.uspDoSomething
GO

IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' and ROUTINE_NAME =  'uspDoSomething' )
BEGIN
    EXEC ( 'CREATE PROCEDURE dbo.uspDoSomething(@i INT)     AS  BEGIN  RAISERROR (''Stubbed version'' , 16, -1) END' )
END

GO

--test only
EXEC dbo.uspDoSomething 0
GO

ALTER PROCEDURE dbo.uspDoSomething(@PatientKey INT)
AS
BEGIN
    SELECT @@VERSION
END

GO

--test only
EXEC dbo.uspDoSomething 0
GO

Помните, что ALTER не изменяет все РАЗРЕШЕНИЯ, которые вы имеете на сценарий. DROP / ADD необходимо повторно применить разрешения.

Обратите внимание, вы изначально не упоминали свою версию sql-сервера. Этот трюк работает с 2014 года и раньше. Очевидно, что более новые версии с CREATE OR ALTER предпочтительнее, чем EXEC с динамическим sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...