Как обнаружить, если хранимая процедура уже существует

from numpy import uint32
126
задан GordyII 2 June 2009 в 04:37
поделиться

7 ответов

Если вы УДАЛИТЕ и СОЗДАЕТЕ процедуру, вы потеряете настройки безопасности. Это может раздражать администратора базы данных или вообще нарушить работу вашего приложения.

Что я делаю, так это создаю тривиальную хранимую процедуру, если она еще не существует. После этого вы можете ИЗМЕНИТЬ хранимую процедуру по своему усмотрению.

IF object_id('YourSp') IS NULL
    EXEC ('create procedure dbo.YourSp as select 1')
GO
ALTER PROCEDURE dbo.YourSp
AS
...

Таким образом, настройки безопасности, комментарии и другие метаданные останутся в силе после развертывания.

159
ответ дан 24 November 2019 в 00:50
поделиться

Самый чистый способ - проверить его существование, отбросить, если он существует, а затем воссоздать его. Вы не можете встроить оператор create proc в оператор IF. Это должно сработать:

IF OBJECT_ID('MySproc', 'P') IS NOT NULL
DROP PROC MySproc
GO

CREATE PROC MySproc
AS
BEGIN
    ...
END
141
ответ дан 24 November 2019 в 00:50
поделиться

Если вы имеете дело только с хранимыми процедурами, проще всего будет, вероятно, отбросить процедуру, а затем воссоздать ее. Вы можете сгенерировать весь код для этого с помощью мастера создания сценариев в SQL Server.

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[YourSproc]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[YourSproc]

CREATE PROCEDURE YourSproc...
31
ответ дан 24 November 2019 в 00:50
поделиться
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xxx]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
BEGIN
CREATE PROCEDURE dbo.xxx

где xxx - имя процесса

11
ответ дан 24 November 2019 в 00:50
поделиться

В дополнение к тому, что уже было сказано, я также хотел бы добавить другой подход и отстаивать использование стратегии дифференциального развертывания сценариев. Вместо создания сценария с отслеживанием состояния, который всегда проверяет текущее состояние и действует в зависимости от этого состояния, разверните его с помощью серии сценариев без отслеживания состояния, которые обновляются с хорошо известных версий . Я использовал эту стратегию, и она приносит свои плоды, поскольку все мои сценарии развертывания теперь полностью бесплатны.

4
ответ дан 24 November 2019 в 00:50
поделиться
IF OBJECT_ID('SPNAME') IS NULL
     -- Does Not Exists
ELSE
     -- Exists
3
ответ дан 24 November 2019 в 00:50
поделиться

Лучшим вариантом может быть использование такого инструмента, как Red-Gate SQL Compare или SQL Examiner, для автоматического сравнения различий и создания сценария миграции.

0
ответ дан 24 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: