함수가 데이터베이스에 존재하는지 찾아서 삭제하고 다시 만들 수 있어야합니다. 저장 프로 시저에 사용하는 기본 코드는 다음과 같습니다.
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
함수가 데이터베이스에 존재하는지 찾아서 삭제하고 다시 만들 수 있어야합니다. 저장 프로 시저에 사용하는 기본 코드는 다음과 같습니다.
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
는 선택 사항이지만 올바른 개체를 식별하는 데 도움이 될 수 있습니다. 있다 수많은 가능한 값 , 특히 이러한 유형의 인수에 대한이 :
CREATE TABLE YourFunctionName(X INT);
코드 실행이 실패합니다.
object_id('YourFunction', 'FN')
하거나하게 다른 지정자 (두 번째 인수는) 어떤 객체의 당신을 참조하는지 취소합니다.
이 방법으로 다양한 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
...
ALTER OR CREATE