SQL 데이터베이스에 함수가 있는지 확인하는 방법
데이터베이스에 함수가 존재하는지 확인해야 해당 함수를 삭제하고 다시 만들 수 있습니다.기본적으로 저장 프로시저에 사용하는 다음과 같은 코드여야 합니다.
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
이것은 SSMS가 다음 명령어를 사용하여 스크립팅할 때 사용하는 것입니다.DROP and CREATE
선택
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
는 옵션이지만 올바른 오브젝트를 식별하는 데 도움이 됩니다.이 type 인수에는 많은 값이 있습니다.특히 다음과 같습니다.
- FN : 스칼라 함수
- IF : 인라인 테이블 값 함수
- TF : 테이블 값 함수
- FS: 어셈블리(CLR) 스칼라 기능
- FT : 어셈블리(CLR) 테이블 값 함수
- U : 테이블(사용자 정의)
오래됐다는 건 알지만 이 대답을 덧붙이고 싶었어요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
...
다음과 같이 다양한 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+에서 사용할 수 있는 OBJECT PROPERTY 함수를 기반으로 합니다.MSDN 기사는 여기에서 찾을 수 있습니다.
OBJECT PROPERTY 함수는 다음 시그니처를 사용합니다.
OBJECTPROPERTY ( id , property )
검색할 개체 유형을 지정하는 리터럴 값을 속성 매개 변수로 전달합니다.제공할 수 있는 가치의 방대한 목록이 있습니다.
SQL Server 2016 SP1, SQL Server 2017 이상부터는 다음 구문을 사용할 수 있습니다.
CREATE OR ALTER [object] ...
이 고리를 뛰어넘는 걸 피하려고요.이 방법에는 (변경할 때마다 새로운 오브젝트 ID를 얻는 것이 아니라) 유지 중인 프로시저에 대한 메타데이터의 추가적인 이점이 있습니다.이는 특히 오브젝트 ID를 신경 쓰는 Query Store나 기타 도구를 사용하는 경우 유용합니다.
언급URL : https://stackoverflow.com/questions/5419082/how-to-check-if-a-function-exists-in-a-sql-database
'programing' 카테고리의 다른 글
6.5인치 디스플레이의 앱스토어 스크린샷 크기는 어떻게 됩니까? (0) | 2023.04.21 |
---|---|
ASP용 Windows Azure 또는 Amazon EC2.NET MVC 개발? (0) | 2023.04.21 |
현재 배치 파일 디렉터리 가져오기 (0) | 2023.04.16 |
Git 저장소에 .gitignore를 커밋해야 합니까? (0) | 2023.04.16 |
WPF의 '도움말' 메뉴 항목을 오른쪽 정렬하려면 어떻게 해야 합니까? (0) | 2023.04.16 |