Aracılığıyla paylaş


clr skalar değerli işlevler

Bir skaler değerli işlev (svf) dize, tamsayı veya bit değeri gibi skaler değer döndürür.İle başlayan SQL Server 2005, oluşturabileceğiniz kullanıcı tanımlı skaler değerli işlevler kullanarak yönetilen kod.net Framework programlama dili.Bu işlevler tarafından erişilebilir Transact-SQL ya da başka yönetilen kod.clr tümleştirme ve yönetilen kod arasında seçim yararları hakkında bilgi ve Transact-SQL, bkz: clr tümleştirme genel bakış.

clr skalar değerli işlevler gereksinimleri

.net Framework SVFs bir sınıf yöntemleri olarak uygulanan bir..NET Framework derleme.Giriş parametreleri bir svf döndürülen türü tarafından desteklenen skaler veri türlerinden herhangi birini olabilir ve SQL Server, dışında varchar, char, rowversion, text, ntext, image, timestamp, table, veya cursor.SVFs arasında bir eşleşme sağlamak gerekir SQL Server veri türü ve dönüş veri türü, uygulama yöntem.Tür dönüştürmeleri hakkında daha fazla bilgi için bkz: clr parametre verilerini eşleme.

Uygularken bir.net Framework svf içinde bir..NET Framework dil SqlFunction hakkında ek bilgileri dahil etmek üzere özel öznitelik belirtilebilir işlev.The SqlFunction attribute indicates whether or not the function accesses or modifies data, if it is deterministic, and if the function involves floating point operations.

Kullanıcı tanımlı skalar değerli işlevler deterministic veya deterministic olmayan olabilir.Belirli bir ile çağrıldığında deterministic işlev her zaman aynı sonucu verir küme giriş parametrelerini.Deterministic olmayan bir işlev, belirli bir ile çağrıldığında farklı sonuçlar döndürebilir küme giriş parametrelerini.

Not

İşlev değil her zaman oluyorsa aynı çıkış değerleri aynı giriş değerleri ve aynı veritabanı durumunu verilen işlev deterministik olarak işaretlemeyin.işlev deterministik olarak işaretleme, ne zaman gerçekten deterministic işlev değil bozuk dizin oluşturulmuş görünümler ve hesaplanan sütunlar yol açabilir.işlev deterministik olarak ayarlayarak işaretle IsDeterministic özellik true.

Tablo değerli parametreleri

Tablo değerli parametreleri (TVPs), bir yordam veya işlev, içine geçirilen kullanıcı tanımlı tablo türleri, birden çok veri satırı sunucusuna iletmek için etkili bir yöntem sağlar.TVPs parametre dizileri için benzer bir işlevsellik sağlar, ancak daha fazla esneklik ve daha yakın tümleştirme sunar Transact-SQL.Ayrıca olası en iyi performansı sağlarlar.TVPs durumsa sunucuya azaltılmasına da yardımcı olur.Birden çok istek sunucuya göndermek yerine, gibi skaler parametreleri listesini veri sunucusuna bir tvp gönderilebilir.Kullanıcı tanımlı tablo türü bir yönetilen saklı yordam, iade edilmesi veya işlev içinde yürütmek için tablo değerli bir parametre olarak geçirilemez SQL Server işlem.TVPs hakkında daha fazla bilgi için bkz: Tablo değerli Parametreler (veritabanı altyapısı).

Bir clr skalar değerli işlev örneği

Tamsayı değerini döndürür ve verilere erişen bir basit svf aşağıdadır:

using Microsoft.SqlServer.Server;
using System.Data.SqlClient;

public class T
{
    [SqlFunction(DataAccess = DataAccessKind.Read)]
    public static int ReturnOrderCount()
    {
        using (SqlConnection conn 
            = new SqlConnection("context connection=true"))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand(
                "SELECT COUNT(*) AS 'Order Count' FROM SalesOrderHeader", conn);
            return (int)cmd.ExecuteScalar();
        }
    }
}
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient

Public Class T
    <SqlFunction(DataAccess:=DataAccessKind.Read)> _
    Public Shared Function ReturnOrderCount() As Integer
        Using conn As New SqlConnection("context connection=true")
            conn.Open()
            Dim cmd As New SqlCommand("SELECT COUNT(*) AS 'Order Count' FROM SalesOrderHeader", conn)
            Return CType(cmd.ExecuteScalar(), Integer)
        End Using
    End Function
End Class

İlk satır kod başvurular Microsoft.SqlServer.Server niteliklere erişmek için ve System.Data.SqlClient ado erişmek için.net ad.(Bu ad alanı içeren SqlClient, the .net Framework veri sağlayıcısı için SQL Server.)

İleri işlev alır SqlFunction 'de bulunan özel öznitelik Microsoft.SqlServer.Server ad.The custom attribute indicates whether or not the user-defined function (UDF) uses the in-process provider to read data in the server.SQL Server does not allow UDFs to update, insert, or delete data.SQL Server can optimize execution of a UDF that does not use the in-process provider.Bu ayarı belirtilen DataAccessKind için DataAccessKind.None.Sonraki satırda, hedef yöntem olan ortak statik (paylaşılan Visual Basic.NET).

The SqlContext class, located in the Microsoft.SqlServer.Server namespace, can then access a SqlCommand object with a connection to the SQL Server instance that is already set up.Burada kullanılan, ancak geçerli işlem içeriği de erişilebilir System.Transactions uygulama programı arabirim (API).

Çoğu işlev gövdesinde kod satırları türleri bulunan kullanan istemci uygulamaları yazmıştır geliştiricilere tanıdık bakmak System.Data.SqlClient ad.

[C#]

using(SqlConnection conn = new SqlConnection("context connection=true")) 
{
   conn.Open();
   SqlCommand cmd = new SqlCommand(
        "SELECT COUNT(*) AS 'Order Count' FROM SalesOrderHeader", conn);
   return (int) cmd.ExecuteScalar();
}  

[Visual Basic]

Using conn As New SqlConnection("context connection=true")
   conn.Open()
   Dim cmd As New SqlCommand( _
        "SELECT COUNT(*) AS 'Order Count' FROM SalesOrderHeader", conn)
   Return CType(cmd.ExecuteScalar(), Integer)
End Using

Uygun komut metni başlatarak belirtilen SqlCommand nesne.Önceki örnekteki satırları sayar tablo SalesOrderHeader.İleri, ExecuteScalar yöntem, cmd nesnesi olarak adlandırılan.Bu türde bir değer döndürür int temel alan sorgu.Son olarak, sipariş sayısı çaðýrana döndürülür.

Bu kod, FirstUdf.cs adlı bir dosyaya kaydedilirse, onu içine derleme olarak aşağıdaki şekilde derlenebilir:

[C#]

csc.exe /t:library /out:FirstUdf.dll FirstUdf.cs 

[Visual Basic]

vbc.exe /t:library /out:FirstUdf.dll FirstUdf.vb

Not

/t:library çalıştırılabilir bir dosya yerine bir kütüphane üretilmesi gösterir.Yürütülebilir dosyaları açamıyor kayıtlı bulunan SQL Server.

Not

Derlenmiş Visual c++ veritabanı nesneleri ile /clr:pure yürütme üzerinde desteklenmez SQL Server.Örneğin, gibi veritabanı nesneleri skaler değerli işlevler içerir.

The Transact-SQL query and a sample invocation to register the assembly and UDF are:

CREATE ASSEMBLY FirstUdf FROM 'FirstUdf.dll';
GO

CREATE FUNCTION CountSalesOrderHeader() RETURNS INT 
AS EXTERNAL NAME FirstUdf.T.ReturnOrderCount; 
GO

SELECT dbo.CountSalesOrderHeader();
GO

işlev adı gösterilen Not Transact-SQL gerek eşleşen adı hedef ortak statik yöntem.

Not

İle ilk SQL Server 2005, bir SQL Server veritabanı uyumluluk düzey "80" Yönetilen kullanıcı tanımlı türleri, saklı yordamları, işlevleri, toplamları veya Tetikleyiciler oluşturamazsınız. Bu clr tümleştirme özelliklerinden yararlanmak için SQL Server, kullanmanız gereken sp_dbcmptlevel (Transact-sql) saklı yordam için küme "100" için veritabanını uyumluluk düzeyini.