사용자 정의 함수 수정Modify User-defined Functions

SQL Server 2017SQL Server 2017 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 사용자 정의 함수를 수정할 수 있습니다.You can modify user-defined functions in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 아래 설명과 같이 사용자 정의 함수를 수정하면 함수의 권한이 변경되거나 종속 함수, 저장 프로시저 또는 트리거에 영향을 주지 않습니다.Modifying user-defined functions as described below will not change the functions’ permissions, nor will it affect any dependent functions, stored procedures, or triggers.

항목 내용In This Topic

시작하기 전 주의 사항 Before You Begin

제한 사항 Limitations and Restrictions

ALTER FUNCTION을 사용하여 다음 동작을 수행할 수 없습니다.ALTER FUNCTION cannot be used to perform any of the following actions:

  • 스칼라 반환 함수를 테이블 반환 함수로 변경하거나 반대로 변경합니다.Change a scalar-valued function to a table-valued function, or vice versa.

  • 인라인 함수를 다중 문 함수로 변경하거나 반대로 변경합니다.Change an inline function to a multistatement function, or vice versa.

  • Transact-SQL 함수를 CLR 함수로 변경하거나 반대로 변경합니다.Change a Transact-SQL function to a CLR function, or vice-versa.

보안 Security

사용 권한 Permissions

함수 또는 스키마에 대한 ALTER 권한이 필요합니다.Requires ALTER permission on the function or on the schema. 함수에 사용자 정의 형식이 지정되면 해당 유형에 대한 EXECUTE 권한이 필요합니다.If the function specifies a user-defined type, requires EXECUTE permission on the type.

SQL Server Management Studio 사용 Using SQL Server Management Studio

사용자 정의 함수를 수정하려면To modify a user-defined function

  1. 수정할 함수가 포함된 데이터베이스 옆의 더하기 기호를 클릭합니다.Click on the plus sign next to the database that contains the function you wish to modify.

  2. 프로그래밍 기능 폴더 옆의 더하기 기호를 클릭합니다.Click on the plus sign next to the Programmability folder.

  3. 수정할 함수가 포함된 폴더 옆의 더하기 기호를 클릭합니다.Click the plus sign next to the folder that contains the function you wish to modify:

    • 테이블 반환 함수Table-valued Function

    • 스칼라 반환 함수Scalar-valued Function

    • Aggregate 함수Aggregate Function

  4. 수정할 함수를 마우스 오른쪽 단추로 클릭하고 수정을 클릭합니다.Right-click the function you want to modify and select Modify.

  5. 쿼리 창에서 ALTER FUNCTION 문을 필요에 따라 변경합니다.In the Query Window, make the necessary changes to the ALTER FUNCTION statement.

  6. 파일 메뉴에서 function_name 저장을 클릭합니다.On the File menu, click Savefunction_name.

Transact-SQL 사용 Using Transact-SQL

사용자 정의 함수를 수정하려면To modify a user-defined function

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute.

    -- Scalar-Valued Function  
    USE [AdventureWorks2012]  
    GO  
    ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()  
    RETURNS [datetime]   
    AS   
    BEGIN  
        RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));  
    END;  
    
    -- Table-Valued Function   
    USE [AdventureWorks2012]  
    GO  
    ALTER FUNCTION [dbo].[ufnGetContactInformation](@PersonID int)  
    RETURNS @retContactInformation TABLE   
    (  
        -- Columns returned by the function  
        [PersonID] int NOT NULL,   
        [FirstName] [nvarchar](50) NULL,   
        [LastName] [nvarchar](50) NULL,   
        [JobTitle] [nvarchar](50) NULL,  
        [BusinessEntityType] [nvarchar](50) NULL  
    )  
    AS   
    -- Returns the first name, last name, job title and business entity type for the specified contact.  
    -- Since a contact can serve multiple roles, more than one row may be returned.  
    BEGIN  
    IF @PersonID IS NOT NULL   
    BEGIN  
         IF EXISTS(SELECT * FROM [HumanResources].[Employee] e   
         WHERE e.[BusinessEntityID] = @PersonID)   
         INSERT INTO @retContactInformation  
              SELECT @PersonID, p.FirstName, p.LastName, e.[JobTitle], 'Employee'  
              FROM [HumanResources].[Employee] AS e  
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = e.[BusinessEntityID]  
              WHERE e.[BusinessEntityID] = @PersonID;  
    
         IF EXISTS(SELECT * FROM [Purchasing].[Vendor] AS v  
         INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = v.[BusinessEntityID]  
         WHERE bec.[PersonID] = @PersonID)  
         INSERT INTO @retContactInformation  
              SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Vendor Contact'   
              FROM [Purchasing].[Vendor] AS v  
              INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = v.[BusinessEntityID]  
              INNER JOIN [Person].ContactType ct ON ct.[ContactTypeID] = bec.[ContactTypeID]  
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = bec.[PersonID]  
              WHERE bec.[PersonID] = @PersonID;  
    
         IF EXISTS(SELECT * FROM [Sales].[Store] AS s  
         INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = s.[BusinessEntityID]  
         WHERE bec.[PersonID] = @PersonID)  
         INSERT INTO @retContactInformation  
              SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Store Contact'   
              FROM [Sales].[Store] AS s  
              INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = s.[BusinessEntityID]  
              INNER JOIN [Person].ContactType ct ON ct.[ContactTypeID] = bec.[ContactTypeID]  
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = bec.[PersonID]  
              WHERE bec.[PersonID] = @PersonID;  
    
         IF EXISTS(SELECT * FROM [Person].[Person] AS p  
         INNER JOIN [Sales].[Customer] AS c ON c.[PersonID] = p.[BusinessEntityID]  
         WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL)   
         INSERT INTO @retContactInformation  
              SELECT @PersonID, p.FirstName, p.LastName, NULL, 'Consumer'   
              FROM [Person].[Person] AS p  
              INNER JOIN [Sales].[Customer] AS c ON c.[PersonID] = p.[BusinessEntityID]  
              WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL;   
         END  
    RETURN;  
    END;  
    

    자세한 내용은 ALTER FUNCTION(Transact-SQL)을 참조하세요.For more information, see ALTER FUNCTION (Transact-SQL).