Mengubah fungsi yang ditentukan pengguna

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Anda dapat mengubah fungsi yang ditentukan pengguna di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Memodifikasi fungsi yang ditentukan pengguna seperti yang dijelaskan di bawah ini tidak akan mengubah izin fungsi, juga tidak akan memengaruhi fungsi dependen, prosedur tersimpan, atau pemicu apa pun.

Pembatasan dan batasan

ALTER FUNCTION tidak dapat digunakan untuk melakukan salah satu tindakan berikut:

  • Ubah fungsi bernilai skalar menjadi fungsi bernilai tabel, atau sebaliknya.

  • Ubah fungsi sebaris menjadi fungsi multistatement, atau sebaliknya.

  • Ubah fungsi Transact-SQL menjadi fungsi CLR, atau sebaliknya.

Izin

Memerlukan izin ALTER pada fungsi atau pada skema. Jika fungsi menentukan jenis yang ditentukan pengguna, memerlukan izin EXECUTE pada jenis .

Menggunakan SQL Server Management Studio

  1. Pilih tanda plus di samping database yang berisi fungsi yang ingin Anda ubah.

  2. Pilih tanda plus di samping folder Programmability .

  3. Pilih tanda plus di samping folder yang berisi fungsi yang ingin Anda ubah:

    • Fungsi bernilai tabel

    • Fungsi bernilai skalar

    • Fungsi Agregat

  4. Klik kanan fungsi yang ingin Anda ubah dan pilih Ubah.

  5. Di Jendela Kueri, buat perubahan yang diperlukan pada pernyataan ALTER FUNCTION.

  6. Pada menu File , pilih Simpanfunction_name.

Menggunakan Transact-SQL

  1. Di Object Explorer, sambungkan ke instans Mesin Database.

  2. Pada bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke jendela kueri dan pilih Jalankan.

    Sampel kode berikut mengubah fungsi bernilai skalar.

    -- Scalar-Valued Function
    USE [AdventureWorks2022]
    GO
    ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()
    RETURNS [datetime]
    AS
    BEGIN
        RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
    END;
    

    Sampel kode berikut mengubah fungsi bernilai tabel.

    -- Table-Valued Function
    USE [AdventureWorks2022]
    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;
    

Baca juga