이것이 간단해야한다는 것을 알고 있지만, 함수가 이미 존재하는지 확인하기 위해 함수 생성을 어떻게 시작해야합니까? 존재한다면 삭제하고 다시 만들고 싶습니다.
이것이 간단해야한다는 것을 알고 있지만, 함수가 이미 존재하는지 확인하기 위해 함수 생성을 어떻게 시작해야합니까? 존재한다면 삭제하고 다시 만들고 싶습니다.
답변:
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에 표시됨)입니다.
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 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
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