함수가 SQL 데이터베이스에 존재하는지 확인하는 방법
함수가 데이터베이스에 존재하는지 찾아서 삭제하고 다시 만들 수 있어야합니다. 저장 프로 시저에 사용하는 기본 코드는 다음과 같습니다.
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
이 DROP and CREATE
옵션을 사용하여 스크립트를 작성할 때 SSMS가 사용하는 것입니다
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
DROP FUNCTION [dbo].[foo]
GO
변경 사항을 배포하기위한 이러한 접근 방식은 개체에 대한 모든 권한을 다시 만들어야하므로 기존의 ALTER
경우 -ing을 고려할 수 있습니다 .
Information_Schema를 사용하는 경향이 있습니다.
IF EXISTS ( SELECT 1
FROM Information_schema.Routines
WHERE Specific_schema = 'dbo'
AND specific_name = 'Foo'
AND Routine_Type = 'FUNCTION' )
함수 및 Routine_Type
저장 프로 시저 변경
IF EXISTS ( SELECT 1
FROM Information_schema.Routines
WHERE Specific_schema = 'dbo'
AND specific_name = 'Foo'
AND Routine_Type = 'PROCEDURE' )
왜 그냥 :
IF object_id('YourFunctionName', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION [dbo].[YourFunctionName]
END
GO
두 번째 인수 object_id
는 선택 사항이지만 올바른 개체를 식별하는 데 도움이 될 수 있습니다. 유형에 가능한 값은 다음과 같습니다.
- FN : 스칼라 함수
- IF : 인라인 테이블 반환 함수
- TF : 테이블 반환 함수
- FS : 어셈블리 (CLR) 스칼라 함수
- FT : 어셈블리 (CLR) 테이블 반환 함수
이 방법으로 다양한 SQL Server 개체의 존재를 확인하기 위해 매우 간결하고 간단한 방법을 사용할 수 있습니다.
IF OBJECTPROPERTY (object_id('schemaname.scalarfuncname'), 'IsScalarFunction') = 1
IF OBJECTPROPERTY (object_id('schemaname.tablefuncname'), 'IsTableFunction') = 1
IF OBJECTPROPERTY (object_id('schemaname.procname'), 'IsProcedure') = 1
이것은 SQL 2005+에서 사용 가능한 OBJECTPROPERTY 함수를 기반으로합니다. MSDN 기사는 여기 에서 찾을 수 있습니다 .
OBJECTPROPERTY 함수는 다음 서명을 사용합니다.
OBJECTPROPERTY ( id , property )
찾고자하는 객체의 유형을 지정하여 리터럴 값을 속성 매개 변수에 전달합니다. 제공 할 수있는 방대한 값 목록이 있습니다.
이 스레드가 오래되었다는 것을 알고 있지만 and Alter
보다 안전하다고 생각하는 사람들을 위해이 답변을 추가하고 싶었습니다 . 아래의 것입니다 존재하는 경우 또는 그것을하지 않는 경우 :Drop
Create
Alter
Function
Create
IF NOT EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
EXEC('CREATE FUNCTION [dbo].[foo]() RETURNS INT AS BEGIN RETURN 0 END')
GO
ALTER FUNCTION [dbo].[foo]
AS
...
참고URL : https://stackoverflow.com/questions/5419082/how-to-check-if-a-function-exists-on-a-sql-database
'Programing' 카테고리의 다른 글
Keras의 Tensorboard 콜백은 어떻게 사용합니까? (0) | 2020.07.07 |
---|---|
함수 호출 전의 @ 문자 (0) | 2020.07.07 |
Eclipse에서 소스를 쉽게 첨부 할 수있는 방법이 있습니까? (0) | 2020.07.07 |
주 번호에서 날짜 계산 (0) | 2020.07.07 |
아파치를 다시 시작하지 않고 사이트의 아파치 구성을 다시로드하는 방법 (0) | 2020.07.07 |