함수가 이미있는 경우 어떻게 제거합니까?
함수가 이미 존재하는지 확인하기 위해 함수가 어떻게 시작해야합니까? 존재한다면 삭제하고 다시 만들고 싶습니다.
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')
이것은 기능 현관뿐만 아니라 모든 object-에 대해 작동 합니다.
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
래퍼를
구문 :
드롭 기능 [존재하는 경우] {[schema_name. ] function_name} [, ... n]
질문 :
DROP Function IF EXISTS udf_name
여기에 더 많은 정보
IF EXISTS
(SELECT *
FROM schema.sys.objects
WHERE name = 'func_name')
DROP FUNCTION [dbo].[func_name]
GO
여기에 대한 나의 견해가 있습니다.
if(object_id(N'[dbo].[fn_Nth_Pos]', N'FN')) is not null
drop function [dbo].[fn_Nth_Pos];
GO
CREATE FUNCTION [dbo].[fn_Nth_Pos]
(
@find char, --char to find
@search varchar(max), --string to process
@nth int --occurrence
)
RETURNS int
AS
BEGIN
declare @pos int --position of nth occurrence
--init
set @pos = 0
while(@nth > 0)
begin
set @pos = charindex(@find,@search,@pos+1)
set @nth = @nth - 1
end
return @pos
END
GO
--EXAMPLE
declare @files table(name varchar(max));
insert into @files(name) values('abc_1_2_3_4.gif');
insert into @files(name) values('zzz_12_3_3_45.gif');
select
f.name,
dbo.fn_Nth_Pos('_', f.name, 1) as [1st],
dbo.fn_Nth_Pos('_', f.name, 2) as [2nd],
dbo.fn_Nth_Pos('_', f.name, 3) as [3rd],
dbo.fn_Nth_Pos('_', f.name, 4) as [4th]
from
@files f;
기능에 대한 존재 여부 확인
IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE
object_id = OBJECT_ID(N'[Schema].[function_Name]')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
DROP FUNCTION [Schema].[function_Name]
Print('function dropped => [Schema].[function_Name]')
END
GO
아래 링크를 클릭하여 저장 프로 시저가 있는지 확인하십시오. http://www.gurujipoint.com/2017/05/check-if-exist-for-trigger-function-and.html
SQL Server 특정이 아닌 SQL ISO 표준 INFORMATION_SCHEMA를 사용하려는 경우 다음 sysobjects
을 수행 할 수 있습니다.
IF EXISTS (
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = N'FunctionName'
)
DROP FUNCTION [dbo].[FunctionName]
GO
참고 URL : https://stackoverflow.com/questions/2290770/how-do-i-drop-a-function-if-it-already-exists
'IT' 카테고리의 다른 글
데이터 프레임에 행 추가 (0) | 2020.08.29 |
---|---|
Vuex 작업에서 약속 반환 (0) | 2020.08.29 |
다중 선택을 허용하지 않고 HTML로 목록 상자를 만드는 방법은 무엇입니까? (0) | 2020.08.29 |
xs : NCName 유형은 무엇이며 언제 언제 사용합니까? (0) | 2020.08.29 |
VirtualBox Vagrant 내에서 Mysql Server에 연결하는 방법은 무엇입니까? (0) | 2020.08.29 |