2017 년 1 월 업데이트-SQL Server 2016+ / Azure SQL Database
SQL Server 2016 및 현재 버전의 Azure SQL Database에는 이제 함수, 프로 시저, 테이블, 데이터베이스 등에 대한 다음 구문이 있습니다 ( DROP IF EXISTS
).
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
또한 SQL Server 2016 서비스 팩 1은 모듈 (기능, 프로 시저, 트리거, 뷰)에 더 나은 기능을 추가하여 권한 또는 종속성의 손실이 없음을 의미합니다 ( CREATE OR ALTER
).
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
이러한 구문 향상은 소스 제어, 배포 등에 사용되는 훨씬 간단한 스크립트로 이어질 수 있습니다.
하지만 사용중인 경우 ...
이전 버전
Management Studio에서이를 스크립팅 할 때 SQL Server가 수행하는 작업을 수행해야합니다.
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE type = 'FN' AND name = 'fn_myfunc')
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE FUNCTION ...';
EXEC sp_executesql @sql;
END
또는 당신은 말할 수 있습니다 :
BEGIN TRY
DROP FUNCTION dbo.fn_myfunc;
END TRY
BEGIN CATCH
PRINT 'Function did not exist.';
END CATCH
GO
CREATE FUNCTION...
아니면 그냥 말할 수 있습니다 :
DROP FUNCTION dbo.fn_myfunc;
GO
CREATE FUNCTION...
(여기에 함수가 존재하지 않으면 오류 메시지가 표시되지만 스크립트는 다음 GO부터 계속되므로 드롭이 작동했는지 여부에 관계없이 함수는 여전히 (재) 생성됩니다.)
함수를 삭제하고 다시 작성하면 권한 및 잠재적으로 종속 정보도 손실됩니다.