Aracılığıyla paylaş


Kullanıcı tanımlı işlevler (veritabanı altyapısı) yürütme

Sorgular veya diğer deyimleri veya hesaplanmış sütunları gibi ifadeler veya dize ifadeler, kullanıcı tanımlı işlevler çağrılabilir.Skalar değerli işlevler execute deyim kullanılarak çalıştırılır.

Skalar değer döndüren kullanıcı tanımlı işlevler çağırma

skaler bir değer aynı veri türünde bir skaler ifade içinde izin verilen her yerde döndüren kullanıcı tanımlı bir işlev harekete geçirmek Transact-SQL deyimleri.Skalar değerli işlevler en az işlev iki bölümü adı kullanarak çağrılması gerekir.Çok parçalı adları hakkında daha fazla bilgi için bkz: Transact-SQL Sözdizimi Kuralları (Transact-SQL).

Sorgular

skaler değer döndüren kullanıcı tanımlı işlevler, bu konumlara izin verilir:

  • Olarak bir expression , select_list seçin, deyim:

    USE AdventureWorks2008R2;
    GO
    SELECT ProductID, ListPrice, dbo.ufnGetProductDealerPrice(ProductID, StartDate) AS DealerPrice,
        StartDate, EndDate
    FROM Production.ProductListPriceHistory
    WHERE ListPrice > .0000
    ORDER BY ProductID, StartDate;
    GO
    
  • Olarak bir expression veya string_expression , where veya HAVING yan tümce tümce tümce yüklemi:

    USE AdventureWorks2008R2;
    GO
    SELECT ProductID, ListPrice, StartDate, EndDate
    FROM Production.ProductListPriceHistory
    WHERE dbo.ufnGetProductDealerPrice(ProductID, StartDate) > .0000
    ORDER BY ProductID, StartDate;
    GO
    
  • Olarak bir group_by_expression bir group by yan tümce tümce tümce.

  • Olarak bir order_by_expression bir order by yan tümce tümce tümce.

  • Olarak bir expression set yan tümce tümce tümcesinde bir update deyim içinde:

    USE AdventureWorks2008R2;
    GO
    UPDATE Production.ProductListPriceHistory
    SET ListPrice = dbo.ufnGetProductDealerPrice(ProductID, StartDate)
    WHERE ProductID > 900;
    GO
    
  • Olarak bir expression bir INSERT deyim values yan tümce tümce tümce içinde:

    Bu konumlara başvurulan kullanıcı tanımlı işlevleri olan mantıksal olarak yürütülen bir saat satır başına.

DENETLEME kısıtlamaları

Bağımsız değişken değerleri işlev başvuru sütunlar yalnızca tablo veya sabitler için aktarılırsa Kontrol kısıtlamaları skaler değer döndüren kullanıcı tanımlı işlevler çağrılabilir.Her saat sorgu işlemci kısıtlamayı denetler, sorgu işlemci ile denetlenen geçerli satır ile ilişkili değişken değerleri işlevini çağırır.Sahibi bir tablo da üzerinde bir denetim kısıtlaması tarafından çağrılan kullanıcı tanımlı işlevin sahibi olmanız tablo.

Varsayılan tanımları

Kullanıcı tanımlı işlevler çağrılan olarak constant_expression default tanımları, geçirilen bağımsız değişken değerleri işlev yalnızca içeren sabitler.Tablonun sahibi de sahibi kullanıcı tanımlı olmalıdır işlev bir varsayılan tablo tanımında tarafından çağrılan.

Hesaplanan sütunlar

Bağımsız değişken değerleri işlev başvuru yalnızca tablo veya sütunlar sabitleri aktarılırsa işlevleri hesaplanmış sütunları tarafından çağrılabilir.Tablonun sahibi tarafından çağrılan kullanıcı tanımlı bir işlev sahibi de olması gerekir bir hesaplanan sütun tablo.

Atama operatörleri

Atama işleçleri (left_operand = right_operand) sağ işleneni. belirtilen ifade skaler değer döndüren kullanıcı tanımlı işlevler çağırabilirsiniz

Akış denetimi deyimleri

skaler değer döndüren kullanıcı tanımlı işlevler, kendi Boole ifadeleri akış denetimi deyimleri tarafından çağrılabilir.

Büyük/küçük harf ifadeler

Büyük/küçük harf ifadeler herhangi bir skaler değer döndüren kullanıcı tanımlı işlevler çağrılabilir.

İfadeleri Yazdır

Bir karakter döndüren kullanıcı tanımlı işlevler dize olarak çağrılan string_expr ifade PRINT deyimleri.

İşlevler ve saklı yordamlar

  • Fonksiyon bağımsız değişkenleri, skaler değer döndüren kullanıcı tanımlı bir işlev başvuru da olabilir.

  • Dönüş integer_expression saklı yordamlar deyimlerinde tamsayı olarak döndüren kullanıcı tanımlı işlevler harekete geçirmek integer_expression.

  • Dönüş return_type_spec kullanıcı tanımlı işlevler deyimlerinde skaler veri türü gibi döndüren kullanıcı tanımlı işlevler harekete geçirmek return_type_spec, sağlanan çağrılan kullanıcı tanımlı bir işlev tarafından döndürülen değeri örtük olarak dönüştürülebilir dönen veri türüne çağıran bir işlev.

Skalar değer döndüren kullanıcı tanımlı işlevler yürütme

Yapabilirsiniz yürütmek olarak saklı yordamlar aynı şekilde skaler değer döndüren kullanıcı tanımlı işlevler.skaler değer döndüren kullanıcı tanımlı bir işlev yürütülürken, parametreler için saklı yordamlar oldukları aynı şekilde belirtilir:

  • Bağımsız değişken değerleri, ayraç içine alınır.

  • Parametre adları belirtilebilir.

  • Parametre adı belirttiyseniz, bağımsız değişken değerleri parametre olarak aynı sırada olmak zorunda değil.

Aşağıdaki örnek, ondalık skaler değer döndüren kullanıcı tanımlı bir işlev oluşturur.

IF OBJECT_ID(N'dbo.ufn_CubicVolume', N'FN') IS NOT NULL
    DROP FUNCTION dbo.ufn_CubicVolume;
GO
CREATE FUNCTION dbo.ufn_CubicVolume
-- Input dimensions in centimeters.
   (@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
    @CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
WITH SCHEMABINDING
AS
BEGIN
   RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END;
GO

Aşağıdaki örnek yürütür dbo.ufn_CubicVolume işlev.Kullanarak Transact-SQL execute deyim bağımsız değişkenler işlev tanımı içindeki parametreler farklı bir sırayla tanımlanır:

DECLARE @MyDecimalVar decimal(12,3);
EXEC @MyDecimalVar = dbo.ufn_CubicVolume @CubeLength = 12.3,
                        @CubeHeight = 4.5, @CubeWidth = 4.5;
SELECT @MyDecimalVar;
GO

Aşağıdaki örnek yürütür dbo.ufn_CubicVolume parametre adı belirtmeden işlev:

DECLARE @MyDecimalVar decimal(12,3);
EXEC @MyDecimalVar = dbo.ufn_CubicVolume 12.3, 4.5, 4.5;
SELECT @MyDecimalVar;
GO

Ayrıca için odbc call sözdizimi kullanabilirsiniz yürütmek dbo.ufn_CubicVolume ole db veya odbc uygulamalardan işlev:

-- First use SQLBindParam to bind the return value parameter marker
-- to a program variable of the appropriate type
SQLExecDirect(hstmt,
              "{ CALL ? = dbo.ufn_CubicVolume(12.3, 4.5, 4.5) }",
              SQL_NTS);

Bir tablo veri türü çağırma Programmability işlevleri getirmek

Döndüren kullanıcı tanımlı bir işlev başlatabileceğiniz bir table burada tablo ifadeler verilir from yan tümce tümce tümcesinde seçin, Ekle, Güncelleştir veya delete deyimleri.Tablo döndüren kullanıcı tanımlı bir işlev, bir çağırma hedefi tarafından isteğe bağlı tablo diğer ad ad izlenebilir.Aşağıdaki örnek tablo değerli işlev çağırmak gösterilmiştir dbo.ufnGetContactInformation , from yan tümce tümce tümce deyim.

USE AdventureWorks2008R2;
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(1209);
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(5);
GO

Ne zaman bir tablo döndüren kullanıcı tanımlı bir işlev çağrıldığında from yan tümce tümce tümcesinde bir alt sorgu, fonksiyon bağımsız değişkenleri dış sorgudan tüm sütunları başvuru yapamazsınız.

Statik, salt okunur imleçler üzerinde bir select açılabilir imleç türü olan deyim whose from yan tümce tümce tümce tablo döndüren kullanıcı tanımlı bir işlev için başvurur.

Döndüren kullanıcı tanımlı bir işlev başvuran bir deyim bir table işlevini çağırır saat.

Yerleşik tablo değerli işlevler çağırma

Bir tabloya değer döndüren birkaç yerleşik tablo değerli işlevler vardır.Bu yerleşik kullanıcı tanımlı işlev çağırma kullanabilirsiniz veya ya da unqualifed olabilir sys şema niteleyici.Kullanmanız gereken sys şema Niteleyici için yerleşik tablo değerli işlevler, kullanıcı tanımlı işlevler aynı adla çakışıyor önlediği için.Aşağıdaki örnek sistem yerleşik işlev çağırın gösterilmiştir fn_helpcollations.

SELECT *
FROM sys.fn_helpcollations();
GO

Tablo değerli işlevler ile ipuçlarını kullanarak

Kullanıcı tanımlı bir işlev oluşturduğunuzda, bir işlev tanımı formunda tüm sorgular tablo ipucu uygulayabilirsiniz.Başvuru görünümleri için uygulanan ipuçları Transact-SQL tablo değerli işlevler de uygulandığını işlevler.Bu işlevler işlev tanımında ipuçları ile çakışabilir.Daha fazla bilgi için bkz: Görünüm çözümleme.

İpuçları başvuru clr tablo değerli işlevler ve görünümler üzerinde uygulayamazsınız.

Not

Yeteneğini Veritabanı Altyapısı multi-deyim için görünümler üzerinde ipuçlarını uygulamak için tablo değerli işlevler, görünüm tanımının parçası olan bir gelecekte kaldırılacak sürüm , SQL Server.

Sonucu herhangi bir sorgunun from yan tümce tümce tümcesinde tablo değerli işlev, tablo ipucu uygulayamazsınız.