Aracılığıyla paylaş


ModifyUser tanımlı işlevler

Kullanıcı tanımlı işlevler değiştirebileceğiniz SQL Server 2012kullanarak SQL Server Management Studioya Transact-SQL. Aşağıda açıklandığı gibi kullanıcı tanımlı işlevler değiştirme işlevlerini izinleri değişmez, ne de herhangi bir bağımlı işlevler, saklı yordamlar veya Tetikleyiciler etkileyecektir.

Bu Konuda

  • Başlamadan Önce

    Sınırlamalar ve Kısıtlamalar

    Güvenlik

  • Kullanıcı tanımlı değiştirmeye çalışması, kullanarak:

    SQL Server Management Studio

    Transact-SQL

Başlamadan Önce

Sınırlamalar ve Kısıtlamalar

alter FUNCTION, aşağıdaki eylemleri gerçekleştirmek için kullanılamaz:

  • Bir skalar değerli işlev değiştirmek için tablo değerli fonksiyon ya da tersi.

  • Satır içi işlev deyimli bir işlev veya tersi değiştir.

  • Transact-sql işlevi bir clr ilevi ya da tersi için değiştirin.

Güvenlik

İzinler

İşlev veya şema alter izni gerektirir. İşlev kullanıcı tanımlı bir tür belirtirse, tür üzerinde EXECUTE izni gerektirir.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

SQL Server Management Studio Kullanarak

Kullanıcı tanımlı bir işlev değiştirmek için

  1. Değiştirmek istediğiniz işlevi içeren veritabanı yanındaki artı işaretini tıklatın.

  2. Yanındaki artı işaretini tıklayın programlama ağıl.

  3. Değiştirmek istediğiniz işlevi içeren klasörün yanındaki artı işaretini tıklatın:

    • Tablo değerli işlev

    • Skalar değerli işlev

    • Toplama işlevi

  4. Seçin ve değiştirmek istediğiniz işlevi sağ Değiştir.

  5. Sorgu penceresinde, alter FUNCTION deyimi için gerekli değişiklikleri yapın.

  6. Tarih dosyasını menüsünden tıklatın kaydetmekfunction_name.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Transact-SQL'i Kullanma

Kullanıcı tanımlı bir işlev değiştirmek için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı 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;
    

Daha fazla bilgi için, bkz. alter FUNCTION (Transact-sql).

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]