이것이 간단해야한다는 것을 알고 있지만, 함수가 이미 존재하는지 확인하기 위해 함수 생성을 어떻게 시작해야합니까? 존재한다면 삭제하고 다시 만들고 싶습니다.
답변
IF EXISTS (
SELECT * FROM sysobjects WHERE id = object_id(N'function_name')
AND xtype IN (N'FN', N'IF', N'TF')
)
DROP FUNCTION function_name
GO
sys * 테이블을 피하려면 대신 수행 할 수 있습니다 (예제 A의 여기 에서).
IF object_id(N'function_name', N'FN') IS NOT NULL
DROP FUNCTION function_name
GO
가장 중요한 것은 삭제하려는 함수의 유형 (FN, IF 및 TF로 최상위 SQL에 표시됨)입니다.
- FN = 스칼라 함수
- IF = 인라인 테이블 함수
- TF = 테이블 함수
답변
if object_id('FUNCTION_NAME') is not NULL
DROP FUNCTION <name>
sysobjects에서 이름을 찾을 수도 있습니다.
IF EXISTS (SELECT *
FROM sysobjects
WHERE name='<function name>' and xtype='FN'
실제로 함수가 테이블 함수일 수 있다면 다음을 사용해야합니다.
xtype in ('FN','TF')
답변
이것은 기능뿐만 아니라 모든 객체에 대해 작동 합니다.
IF OBJECT_ID('YourObjectName') IS NOT NULL
그런 다음 다음과 같이 개체의 맛을 추가하십시오.
IF OBJECT_ID('YourFunction') IS NOT NULL
DROP FUNCTION YourFunction
답변
SQL Server 2016에서 프로 시저를 삭제하고 다시 만드는 두 가지 옵션이 있습니다.
SQL Server 2016부터-사용 IF EXISTS
DROP FUNCTION [ IF EXISTS ] { [ schema_name. ] function_name } [ ,...n ] [;]
SQL Server 2016 SP1부터 시작-사용 OR ALTER
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
답변
IF EXISTS
(SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'functionName')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION functionName
GO
답변
나는 일반적으로 sys * 유형 테이블의 쿼리를 피하고 공급 업체는 주요 릴리스 또는 기타 릴리스간에이를 변경하는 경향이 있습니다. 내가 항상 한 일은 DROP FUNCTION <name>
명령문 을 발행하고 다시 발생할 수있는 SQL 오류에 대해 걱정하지 않는 것입니다. DBA 영역의 표준 절차를 고려합니다.
답변
에서 SQL Server 2016 CTP3
당신은 새 사용할 수 있습니다 다이 문 대신 큰 IF
래퍼를
구문 :
DROP FUNCTION [IF EXISTS] {[schema_name. ] function_name} [, … n]
질문:
DROP Function IF EXISTS udf_name
여기에 더 많은 정보