Aracılığıyla paylaş


(Transact-SQL) işlev CREATE

Kullanıcı tanımlı bir işlev oluşturur.Bu, kaydedilmiş birTransact-SQLya da ortak dil çalýþma zamaný (CLR) yordamı, sayı değeri.Kullanıcı tanımlı skaler değerli ya da tablo deerli işlevlerdir.İşlevleri tek değerli, VERİR yan tümce skaler veri türlerinden birini belirtir.Tek değerli işlevler kullanarak birden çok tanımlanabilirTransact-SQLifadeler.Tablo deerli VERİR yan TABLE belirtiyorsa işlevlerdir.İşlev gövdesi nasıl tanımlandığını bağlı tablo değerli işlev satır içi veya multi-deyim işlevleri olarak sınıflandırılabilir.Daha fazla bilgi için bkz:Kullanıcı tanımlı işlevler tablo biçiminde.

Kullanıcı tanımlı işlevler kullanılarak değiştirilmişALTER işlevDROP işlevkullanarak bırakılan ve.

Topic link iconTransact-SQL sözdizimi kuralları

Scalar Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS return_data_type
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]

Inline Table-Valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

Multistatement Table-valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [READONLY] } 
    [ ,...n ]
  ]
)
RETURNS @return_variable TABLE <table_type_definition>
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN
    END
[ ; ]

CLR Scalar Functions
CREATE FUNCTION [ schema_name. ] function_name 
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
)
RETURNS { return_data_type }
    [ WITH <clr_function_option> [ ,...n ] ]
    [ AS ] EXTERNAL NAME <method_specifier>
[ ; ]

CLR Table-Valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
)
RETURNS TABLE <clr_table_type_definition> 
    [ WITH <clr_function_option> [ ,...n ] ]
    [ ORDER ( <order_clause> ) ]
    [ AS ] EXTERNAL NAME <method_specifier>
[ ; ]

<order_clause> ::= 
{
   <column_name_in_clr_table_type_definition>
   [ ASC | DESC ] 
} [ ,...n] 

Method Specifier
<method_specifier>::=
    assembly_name.class_name.method_name

Function Options
<function_option>::= 
{
    [ ENCRYPTION ]
  | [ SCHEMABINDING ]
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
  | [ EXECUTE_AS_Clause ]
}

<clr_function_option>::=
}
    [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
  | [ EXECUTE_AS_Clause ]
}

Table Type Definitions
<table_type_definition>:: = 
( { <column_definition> <column_constraint> 
  | <computed_column_definition> } 
        [ <table_constraint> ] [ ,...n ]
) 

<clr_table_type_definition>::= 
( { column_name data_type } [ ,...n ] )

<column_definition>::=
{
    { column_name data_type }
    [ [ DEFAULT constant_expression ] 
      [ COLLATE collation_name ] | [ ROWGUIDCOL ]
    ]
    | [ IDENTITY [ (seed , increment ) ] ]
    [ <column_constraint> [ ...n ] ] 
}

<column_constraint>::= 
{
    [ NULL | NOT NULL ] 
    { PRIMARY KEY | UNIQUE }
      [ CLUSTERED | NONCLUSTERED ] 
      [ WITH FILLFACTOR = fillfactor 
        | WITH ( < index_option > [ , ...n ] )
      [ ON { filegroup | "default" } ]
  | [ CHECK ( logical_expression ) ] [ ,...n ]
}

<computed_column_definition>::=
column_name AS computed_column_expression 

<table_constraint>::=
{ 
    { PRIMARY KEY | UNIQUE }
      [ CLUSTERED | NONCLUSTERED ] 
            ( column_name [ ASC | DESC ] [ ,...n ] )
        [ WITH FILLFACTOR = fillfactor 
        | WITH ( <index_option> [ , ...n ] )
  | [ CHECK ( logical_expression ) ] [ ,...n ]
}

<index_option>::=
{ 
    PAD_INDEX = { ON | OFF } 
  | FILLFACTOR = fillfactor 
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF } 
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS ={ ON | OFF } 
}

Bağımsız değişkenler

  • schema_name
    Hangi şema adı kullanıcı tanımlı işlev aittir.

  • function_name
    Kullanıcı tanımlı adı işlev.işlev adları gereken kuralları ile uyumlutanımlayıcılar , şema. ve veritabanı içinde benzersiz olmalıdır

    Not

    Bir parametre belirtilmemişse, işlev adı sonra ayraçlar gereklidir.

  • @parameter\_name
    Bir kullanıcı tanımlı işlev parametre belirtilir.Bir veya birkaç parametre bildirilebilir.

    Maksimum 2100 parametrelerinin bir işlev olabilir.Her değer olarak parametre gerekir sağlanan kullanıcı tarafından işlev parametresi için varsayılan tanımlı değilse, yürütülür.

    Parametre adı kullanarak belirttiğiniz bir ilk karakter olarak (@) işareti.Parametre adı tanımlayıcı kurallarına uymanız gerekir.Parametreleridir yerel işlev; diğer işlev s aynı parametre adları kullanılabilir.Parametre, yalnızca sabit yerini alabilir; tablo adları, sütun adları ve diğer veritabanı nesnelerinin adlarını yerine kullanılamaz.

    Not

    ANSI_WARNINGS bir saklı yordamda, kullanıcı tanımlı işlevin parametre iletmek veya bildirdiğiniz değil ödenen ve küme toplu iş iş tablo değişkenleri.Örneğin, bir değişken olarak tanımlanırchar(3)ve üç karakterden daha büyük bir değere ayarlanırsa, verileri tanımlı boyutunu ve INSERT kesilir veya UPDATE deyim başarılı.

  • [ type_schema_name. ] parameter_data_type
    Parametre veri türü ve isteğe bağlı olarak şema ait olduğu belirtilir.İçinTransact-SQLişlevleri, CLR kullanıcı tanımlı türler ve kullanıcı tanımlı tablo türleri de dahil olmak üzere tüm veri türleri dışında verilirtimestampveri türü.Tüm veri türleri için CLR işlevleri CLR kullanıcı tanımlı türler de dahil olmak üzere, dışında verilirtext,ntext,image, kullanıcı tanımlı tablo türleri vetimestampveri türü.Nonscalar türleri,cursorvetableda parametre veri türü olarak belirtilemezTransact-SQLCLR işlevleri.

    Iftype_schema_namebelirtilmemiş,Database Engineararscalar_parameter_data_typeaşağıdaki sırada:

    • Şema adlarını içerirSQL Serververi türü.

    • Geçerli veritabanındaki geçerli kullanıcının varsayılan şeması.

    • The dbo schema in the current database.

  • [ = default ]
    Parametre için varsayılan bir değer belirtilir., Birdefaulttanımlanmış değer, işlev yürütülen bir değer için parametre belirtmeden

    Not

    CLR işlevleri dışında varsayılan parametre değerleri belirtilebilirvarchar(max)vevarbinary(max)veri türü.

    İşlevinin parametre varsayılan değeri varsa, ne zaman varsayılan değerini almak için işlev çağrılır DEFAULT olmalıdır anahtar sözcüğü belirtildi.Bu davranış, saklı yordamlar hangi atlama parametre de varsayılan değeri gösterir varsayılan değerler parametreleri kullanarak farklıdır.

  • SALT OKUNUR
    Parametre olamaz güncelleştirilmiş veya işlev tanımı değiştirilmiş olduğunu gösterir.Parametre türü kullanıcı tanımlı tablo türü, salt okunur belirtilmelidir.

  • return_data_type
    Kullanıcı tanımlı skaler bir dönüş değeri işlev.İçinTransact-SQLişlevleri, CLR kullanıcı tanımlı türler de dahil olmak üzere tüm veri türleri dışında verilirtimestampveri türü., CLR kullanıcı tanımlı türler de dahil olmak üzere tüm veri türleri için CLR işlevleri dışında verilirtext,ntext,image, vetimestampveri türü.Nonscalar türleri,cursorvetableya da, döndürülen veri türü olarak belirtilemezTransact-SQLCLR işlevleri.

  • function_body
    Specifies that a series of Transact-SQL statements, which together do not produce a side effect such as modifying a table, define the value of the function.function_body is used only in scalar functions and multistatement table-valued functions.

    skaler işlevlerifunction_bodybir diziTransact-SQLifadeleri, birlikte değerlendirmek için skaler bir değer.

    Çoklu deyimli tablo değerli işlevlerfunction_bodybir diziTransact-SQLbir tablo doldurmak ifadeleri dönmek değişken.

  • scalar_expression
    skaler değer belirtir skaler işlev verir.

  • TABLO
    Belirleyen bir dönüş değeri tablo değerli işlev bir tablodur.Yalnızca sabit ve @local\_variablesgeçirilen tablo değerli işlevler.

    Satır içi tablo değerli işlevler TABLE dönüş değeri, tek bir deyim ile tanımlanır.Satır içi işlevleri ilgili iade değişkenleri yoktur.

    , Çoklu deyimli tablo değerli işlevler, @return\_variablebir tablo değişkeni depolamak ve işlev. değer olarak döndürülen satırları biriken@return_variableyalnızca belirtilebilirTransact-SQLişlevleri ve değil işlevlerini CLR.

  • select_stmt
    Tablo deerli bir satır içi dönüş değeri tanımlayan deyim tek iş işlev.

  • ORDER (< order_clause >)
    Hangi sonuçlar tablo değerli işlev iade edilen sırayı belirler.Daha fazla bilgi için bu konuda daha sonra "Kılavuzu üzerinde kullanarak sıralama düzeni," bölümüne bakın.

  • EXTERNAL NAME <method_specifier> assembly_name.class_name.method_name
    Specifies the method of an assembly to bind with the function.assembly_name must match an existing assembly in SQL Server in the current database with visibility on.class_name must be a valid SQL Server identifier and must exist as a class in the assembly.If the class has a namespace-qualified name that uses a period (.) to separate namespace parts, the class name must be delimited by using brackets ([ ]) or quotation marks (" ").method_name must be a valid SQL Server identifier and must exist as a static method in the specified class.

    Not

    Varsayılan olarak,SQL Serverolamaz yürütmek CLR kodu.Oluşturabilir, değiştirebilir ve ortak dil çalışma zamanı modülü başvuru veritabanı nesnelerini bırakın; ancak, olamaz çalıştırmak, bu başvurularıSQL Serverolanak kadarCLR seçeneği etkin.Bu seçeneği etkinleştirmek içinsp_configure.

  • <table_type_definition> ( { <column_definition> <column_constraint>   | <computed_column_definition> }   [ <table_constraint> ] [ ,...n ] )
    Tanımlar tablo veri türü için birTransact-SQLişlev.Tablo bildirim sütun tanımları ve sütun veya tablo kısıtlamaları içerir.tablo Birincil dosya grubu her zaman geçer.

  • < clr_table_type_definition > ( { column_namedata_type } [ ,...n ] )
    Tablo veri türleri için tanımlayan bir CLR işlev.Tablo bildirim, yalnızca sütun adları ve veri türlerini içerir.tablo Birincil dosya grubu her zaman geçer.

<function_option>::= and<clr_function_option>::=

Belirleyen işlev aşağıdaki seçeneklerden birini veya birkaçını olacaktır.

  • Şifreleme
    That indicatesDatabase EngineCREATE işlevi, özgün metni dönüştürür deyim obfuscated.The obfuscation çıkışını bir katalog görünümleri doğrudan görülmez.Sistem tablo veya veritabanı dosyalarına erişimi olan kullanıcılar obfuscated metni alınamıyor.Ancak, metin, ya da sistem tabloları içinde ayrıcalıklı kullanıcılar için kullanılabilirDAC bağlantı noktası veya doğrudan erişim veritabanı dosyaları.Ayrıca, sunucu işlemi bir hata ayıklayıcı ekleyebileceğini kullanıcıların özgün yordamı zamanında bellekten alabilirsiniz.Sistem meta veriler, erişme hakkında daha fazla bilgi için bkz:Meta veriler görünürlük yapılandırma.

    Bu seçeneği kullanmalarını engeller işlev bir parçası olarak yayımlanmış gelenSQL Serverçoğaltma.Bu seçenek, CLR işlevleri için belirtilemez.

  • SCHEMABINDING
    Belirleyen işlev başvurduğu veritabanı nesnelerine bağlıdır.SCHEMABINDING belirtildiğinde, nesnelerin temel işlev tanımı etkileyecek şekilde değiştirilemez.işlev Tanımı kendini olmalı önce değiştirilmiş veya değiştirilecek olan nesne bağımlılıkları kaldırmak için İptal.

    Bağlantısını işlev başvurduğu nesne için yalnızca aşağıdaki eylemlerden birini ortaya çıktığında kaldırılır:

    • işlev Bırakılır.

    • işlev Belirtilmemiş SCHEMABINDING seçeneğiyle ALTER deyim kullanılarak değiştirilebilir.

    A işlev yalnızca aşağıdaki koşullar doğruysa, şema bağlanabilir:

    • İşlevi olan birTransact-SQLişlev.

    • Kullanıcı tanımlı işlevler ve işlev tarafından başvurulan görünümleri de şemaya bağlı.

    • Nesneler tarafından başvuruda bulunulan işlev iki parçalı adı kullanılarak başvurulur.

    • işlev Ve aynı veritabanına başvurduğu nesnelere ait.

    • CREATE işlevi gerçekleştiren kullanıcının deyim işlevi başvuran veritabanı nesneleri üzerinde başvurular izni.

    CLR işlevi veya işlevleri, başvuru SCHEMABINDING belirtilemez diğer ad ad veri türleri.

  • BOŞ GİRDİ NULL DÖNDÜRÜR | BOŞ GİRDİ OLARAK ADLANDIRILIR.
    BelirtirOnNULLCallöznitelik skaler değerli işlev.ON NULL INPUT ADLI belirtilmezse, varsayılan olarak açık.Bu işlev gövdesi null bağımsız değişken olarak geçirilen bile çalıştırır anlamına gelir.

    , VERİR NULL ON NULL INPUT belirtilen bir CLR işlev, bunu belirtenSQL ServerNULL, NULL, aslında çağırma işlevini. gövde olmadan aldığı bağımsız değişkenlerden biri olan dönebilirsinizVarsa bir CLR ilevi yöntem belirtilmiş<method_specifier>zaten özel bir öznitelik belirten VERİR NULL ON NULL INPUT, ancak CREATE işlev ifadesini gösterir ADLI ON NULL INPUT, CREATE işlev ifadesini alıyor önceliği.The OnNULLCall attribute cannot be specified for CLR table-valued functions.

  • yürütmek yan tümce
    Kullanıcı tanımlı işlevin yürütüldüğü güvenlik bağlamını belirtir.Bu nedenle, denetleyebilir hangi kullanıcı hesabınınSQL Serverişlev. başvurulan tüm veritabanı nesnelerinin izinlerini doğrulamak için kullandığı

    Not

    yürütmek AS bekleme kullanıcı tanımlı işlevler için belirtilemez.

    Daha fazla bilgi için bkz:yan tümce (Transact-SQL) yürütmek.

<column_definition>::=

Tablo veri türü tanımlar.Tablo bildirim sütun tanımları ve sınırlamaları içerir.CLR için İşlevler, yalnızcacolumn_namevedata_typebelirtilebilir.

  • column_name
    Tablodaki bir sütun adıdır.Column names must comply with the rules for identifiers and must be unique in the table.column_name can consist of 1 through 128 characters.

  • data_type
    Sütunun veri türünü belirtir.İçinTransact-SQLişlev, tüm veri türleri, CLR kullanıcı tanımlı türler de dahil olmak üzere, dışında verilirtimestamp.Tüm veri türleri için CLR işlevleri CLR kullanıcı tanımlı türler de dahil olmak üzere, dışında verilirtext,ntext,image,char,varchar,varchar(max), andtimestampNonscalar türü kullanırcursorda sütun veri türü olarak belirtilemezTransact-SQLCLR işlevleri.

  • constant_expression Varsayılan
    Specifies the value provided for the column when a value is not explicitly supplied during an insert.constant_expression is a constant, NULL, or a system function value.DEFAULT tanımları olan dışındaki herhangi bir sütun için uygulanabilir kimlik özellik.Varsayılan CLR tablo değerli işlevler için belirtilemez.

  • collation_name HARMANLAMA
    Sütun harmanlama belirtir.Belirtilmezse, sütun veritabanının varsayılan harmanlama olarak atanır.Harmanlama adı, bir Windows harmanlaması adı veya bir SQL Harmanlaması adı olabilir.Listesini ve alfabe hakkında daha fazla bilgi için bkz:Windows harmanlaması adı (Transact-SQL)veName (Transact-SQL) SQL Server harmanlama.

    HARMANLAMA yan tümcesini, yalnızca sütunların harmanlamaları değiştirmek için kullanılabilirchar,varchar,nchar, venvarcharveri türü.

    COLLATE CLR tablo değerli işlevler için belirtilemez.

  • ROWGUIDCOL
    Yeni bir sütun, satır genel benzersiz tanımlayıcı sütun olduğunu gösterir.Tek biruniqueidentifierTablo / sütun belirlenen ROWGUIDCOL sütun.The ROWGUIDCOL özellik yalnızca atanabilir biruniqueidentifiersütun.

    ROWGUIDCOL özellik saklanan değerlerin benzersiz zorla sütun.Bu da otomatik olarak eklenen yeni satırlar için değerleri oluşturmaz tablo.Her sütun için benzersiz değerleri oluşturmak için NEWID işlevini INSERT deyimlerini kullanın.Varsayılan bir değer belirlenebilir; ancak, varsayılan olarak NEWID belirtilemez.

  • Identity:
    Yeni bir sütun kimlik sütunu gösterir.Yeni bir satır eklendiğinde için tablo,SQL Serversağlayan benzersiz, artan bir değer sütun.Kimlik sütunları genellikle kullanılan birincil anahtar kısıtlamaları ile birlikte benzersiz satır tanımlayıcısı olarak hizmet verecek tablo.IDENTITY özellik için atanabilirtinyint,smallint,int,bigint,decimal(p,0), ornumeric(p,0)sütun.Her tablo yalnızca bir kimlik sütun oluşturulabilir.Kimlik sütun ile ilişkili varsayılan değerler ve varsayılan kısıtlamalar kullanılamaz., Her ikisini birden belirtmelisinizseedveincrementveya hiçbiri.Hiçbiri belirtilmediyse (1,1) varsayılandır.

    IDENTITY CLR tablo değerli işlevler için belirtilemez.

    • seed
      İlk satırda atanacak bir tamsayı değer tablo.

    • increment
      Eklemek için bir tamsayı değerseeddeğer art arda gelen satırlarda tablo.

<column_constraint>::= and<table_constraint>::=

Belirtilen sütun veya tablo kısıtlaması tanımlar.CLR işlevleri için izin verilen tek kısıtlama türü NULL olur.Adlandırılmış kısıtlamalara izin verilmez.

  • NULL | BOŞ DEĞİL
    Sütunda null değerlere izin verilip verilmeyeceğini belirler.BOŞ tam bir sınırlama değildir ancak gibi yalnızca belirtilen NOT NULL.NOT NULL, CLR tablo değerli işlevler için belirtilemez.

  • BİRİNCİL ANAHTAR
    Bir kısıtlamayı zorlar mı varlık bütünlüğü benzersiz dizin içinde belirtilen sütun.Tablo deerli kullanıcı tanımlı işlevleri, tablo başına yalnızca bir sütun, birincil anahtar kısıtlaması oluşturulamaz.birincil anahtar, CLR tablo değerli işlevler için belirtilemez.

  • BENZERSİZ
    Varlık sağlayan bir kısıtlama mı bütünlük belirtilen sütun veya sütunlar boyunca benzersiz dizin.Bir tablonun birden fazla UNIQUE kısıtlamaları olabilir.BENZERSİZ CLR tablo değerli işlevler için belirtilemez.

  • KÜMELENMİŞ | KÜMELENMEMİŞ
    Bir küme veya kümelenmemiş bir dizin için birincil anahtar veya UNIQUE sınırlaması oluşturulduğunu gösterir.birincil anahtar kısıtlamaları kümelenmiş ve UNIQUE kısıtlamaları NONCLUSTERED.

    Kümelenmiş için yalnızca bir kısıtlama olarak belirtilebilir.Kümelenmiş bir UNIQUE sınırlamasıyla için belirtilen ve birincil anahtar kısıtlaması da belirlenir, birincil anahtar NONCLUSTERED kullanır.

    Kümelenmiş ve NONCLUSTERED belirtilemez CLR tablo değerli işlevler.

  • ONAY
    Bir sınırlama sütun veya sütunlara girilebilecek olası değerleri sınırlayarak etki bütünlüğünü zorlar belirtilir.CHECK kısıtlamaları CLR tablo değerli işlevler için belirtilemez.

    • logical_expression
      TRUE veya FALSE döndüren bir mantık ifadesini belirtilir.

<computed_column_definition>::=

hesaplanan sütun belirtir.Hesaplanan sütunlar hakkında daha fazla bilgi için bkz:tablo (Transact-SQL) CREATE.

  • column_name
    Hesaplanan sütun adıdır.

  • computed_column_expression
    Hesaplanan sütun değerini tanımlayan bir ifade belirtilir.

<index_option>::=

birincil anahtar veya UNIQUE dizin için dizin seçeneklerini belirtir.Dizin seçenekleri hakkında daha fazla bilgi için bkz:INDIS (Transact-SQL) CREATE.

  • PAD_INDEX = {AÇIK | KAPALI}
    Dizin doldurma belirtir.Varsayılan değer kapalı'dır.

  • FILLFACTOR = fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or change.fillfactor must be an integer value from 1 to 100.Varsayılan 0'dur.

  • IGNORE_DUP_KEY = {AÇIK | KAPALI}
    Yinelenen anahtar değerleri benzersiz dizin eklemek bir ekleme işlemi çalıştığında hata yanıtını belirtir.IGNORE_DUP_KEY seçeneği, yalnızca dizin oluşturulan veya yeniden operasyonunu eklemek için geçerlidir.Varsayılan değer kapalı'dır.

  • STATISTICS_NORECOMPUTE = {AÇIK | KAPALI}
    Dağılım istatistiklerini recomputed olup olmadığını belirtir.Varsayılan değer kapalı'dır.

  • ALLOW_ROW_LOCKS = {AÇIK | KAPALI}
    Satır kilitleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

  • ALLOW_PAGE_LOCKS = {AÇIK | KAPALI}
    Sayfa kilitleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

En iyi yöntemler

Kullanıcı tanımlı bir işlev ile SCHEMABINDING oluşturulmaz, yan tümce, alt nesnelere yapılan değişiklikler işlevin tanımını etkiler ve onu çağrıldığında beklenmeyen sonuçlar.Emin olmak için aşağıdaki yöntemlerden birini kullanarak uygulamanız önerilir işlev alt nesnelerine yapılan değişiklikler nedeniyle eski olmaz:

  • İLE SCHEMABINDING belirtmek yan tümce zaman oluşturmakta işlevi.Bu işlev tanımında başvurulan nesne işlevi de değişiklik sürece değiştirilemez sağlar.

  • yürütmeksp_refreshsqlmodule işlev. tanımında belirtilen herhangi bir nesne değiştirdikten sonra yordamı depolanan

Veri Türleri

Parametreleri belirtilirse bir CLR işlev, olması gerekenSQL Servertürleri için önceden tanımlı olarakscalar_parameter_data_type.Karşılaştırma hakkında bilgi içinSQL ServerSistem veri türleri, CLR entegrasyonu veri türlerine veya.NET Frameworkortak dil çalışma zamanı veri türleri Bkz:CLR parametre veri eşleme.

İçinSQL Serverdoğru yöntemi, bu yöntem belirtilen bir sınıf içinde aşırı başvuru için<method_specifier>aşağıdaki özelliklere sahip olmalıdır:

  • Parametreleri de aynı sayıda [,...n ].

  • Değer, başvuru değil tüm parametreleri alır.

  • Belirtilen ile uyumlu olan parametre türleri kullananSQL Serverişlev.

CLR ilevi döndürülen veri türü (tablo DÖNDÜRÜR), dönüş veri türü yöntem, tablo türünü belirtir<method_specifier>türünde olmalıdırIEnumeratororIEnumerable, arabirim işlevini. oluşturan kişi tarafından uygulanan kabul edilir veFarklıTransact-SQLİşlevler, CLR işlevleri birincil anahtar, UNIQUE, ekleyin veya kısıtlamaları, CHECK<table_type_definition>.Sütunların veri türlerini belirtilen<table_type_definition>yöntem tarafından döndürülen sonuç kümesinin karşılık gelen sütun türleri eşleşmelidir<method_specifier>yürütme saat.Bu tür denetleme işlev oluşturulduğu anda gerçekleştirilmez.

Program CLR işlevleri hakkında daha fazla bilgi için bkz:CLR kullanıcı tanımlı işlevler.

Genel açıklamalar

skaler-değerli işlev çağrılan burada skaler ifadeler kullanılır.Bu hesaplanan sütunlar ve CHECK kısıtlaması tanımlarını içerir.skaler-değerli işlev de yürütülen kullanarakyürütmek deyim. En az işlev iki parçalı adı kullanarak tek değerli işlevler çağrılması gerekir.Çok parçalı adları hakkında daha fazla bilgi için bkz:Transact-SQL sözdizimi kuralları (Transact-SQL).Tablo değerli işlevler çağrılan FROM tablo ifadeler burada izin yan tümce SELECT, INSERT, UPDATE veya DELETE deyimleri.Daha fazla bilgi için bkz:Kullanıcı tanımlı işlevler (Veritabanı Altyapısı) çalıştırma.

Birlikte çalışabilirlik

Bir işlev aşağıdaki ifadeler geçerlidir:

  • Atama deyimleri.

  • Akış denetimi deyimleri TRY... CATCH deyimi dışında.

  • Yerel veri değişkenleri ve yerel imleç tanımlayan ifadelerden BİLDİRİN.

  • Yerel değişkenler için değerler atayın ifadeleri ile seçim listelerini içeren deyimleri SELECT.

  • İmleç işlemlerini, açık, bildirilen yerel imleç başvuran kapalı ve işlev ayırmanın.INTO yan tümcesini kullanarak, yerel değişkenler için değerler atayın yalnızca getirme ifadeleri izin verilir; verileri istemciye geri getirme ifadeleri izin verilmez.

  • INSERT, UPDATE ve DELETE deyimlerini yerel Tablo değişkenlerini değiştirme.

  • Genişletilmiş arama yürütmek deyimi, saklı.

  • Daha fazla bilgi için bkz:Kullanıcı tanımlı işlevler (Veritabanı Altyapısı) oluşturma.

Hesaplanan sütun birlikte çalışabilirlik

InSQL Server 2005ve daha sonra işlevler aşağıdaki özellikler.Bu özelliklerin değerlerini işlevleri kalıcı veya dizine hesaplanan sütunlarda kullanılabilir olup olmadığını belirler.

Özellik

Açıklama

NOTLAR

IsDeterministic

işlev Belirli ya da nondeterministic.

Yerel veri erişimi, belirli işlevler kullanılabilir.Örneğin, her saat belirli bir giriş değerleri kümesini kullanarak ve aynı veritabanı durumunu denir her saat aynı sonucu döndüren işlev belirli etiketli.

IsPrecise

işlev kesin ya da imprecise.

İmprecise işlevleri, kayan nokta işlemleri gibi işlemleri içerir.

IsSystemVerified

Duyarlık ve determinism özelliklerini işlev tarafından onaylanmışSQL Server.

 

SystemDataAccess

İşlevi, yerel sistem verilerini (Sistem Katalog veya sanal sistem tabloları) erişen örnek,SQL Server.

 

UserDataAccess

İşlevi, kullanıcı verilerini yerel erişim örnek,SQL Server.

Kullanıcı tanımlı tablo ve geçici tablolara değil Tablo değişkenlerini içerir.

Duyarlık ve determinism özellikleriniTransact-SQLişlevi tarafından otomatik olarak belirlenirSQL Server.Daha fazla bilgi için bkz:Kullanıcı tanımlı fonksiyonu tasarım yönergeleri.CLR işlevleri veri erişimi ve determinism özelliklerinin kullanıcı tarafından belirlenebilir.Daha fazla bilgi için bkz:CLR tümleştirme özel öznitelikleri'e genel bakış.

Bu özelliklerin geçerli değerlerini görüntülemek için kullanınOBJECTPROPERTYEX.

Kullanıcı tanımlı çağıran hesaplanan sütun işlev bir dizinde kullanılabilecek, kullanıcı tanımlı işlev aşağıdaki özellik değeri vardır:

  • IsDeterministic = TRUE

  • IsSystemVerified (hesaplanan sütun kalıcı sürece) = true

  • UserDataAccess = false

  • SystemDataAccess = false

Daha fazla bilgi için bkz:Hesaplanan sütunlar üzerinde dizin oluşturma.

Yordam İşlevler tarafından depolanan Genişletilmiş arama

Sonuç kümeleri için gelen bir işlev içinde çağrıldığında genişletilmiş saklı yordam, döndüremez istemci.Tüm ODS istemciye sonuç kümesini döner veren API'leri FAIL.Genişletilmiş saklı yordam geri örneğine bağlanmakSQL Serverancak, değil deneyin, çağrılan işlev olarak aynı işlem; genişletilmiş saklı yordamı.

Benzer bir toplu iş veya saklı yordam, genişletilmiş saklı yordam etkinleştirilmelerinde için yürütülen hangi Windows Güvenlik hesabının bağlamındaSQL Serverolduğu çalışan.Sahibi saklı yordam, bu kullanıcılar üzerinde yürütmek izni vermek, göz önünde bulundurmalısınız.

Kısıtlamaları ve sınırlamaları

Kullanıcı tanımlı işlevler, veritabanı durumunu değiştirme işlemleri için kullanılamaz.

Kullanıcı tanımlı işlevler, bir OUTPUT INTO içeremez yan tümce bir tablo olarak hedefine sahip.

AşağıdakiService Brokerifadeleri tanımı içinde eklenebilir olamaz birTransact-SQLkullanıcı tanımlı işlev:

  • BAŞLANGIÇ İLETİŞİM KONUŞMA

  • SON KONUŞMA

  • GET KONUŞMA GRUBU

  • KONUŞMA TAŞIMA

  • ALMA

  • GÖNDERME

Kullanıcı tanımlı işlev s içe; yani, bir kullanıcı tarafından tanımlanan işlev başka çağırabilirsiniz.Çağrılan işlev yürütme başladığında iç içe geçmiş düzey artar ve çağrılan işlev Yürütme tamamlandığında indirildiği.Kullanıcı tanımlı işlevler, 32 düzeye kadar iç içe kullanılabilir.En yüksek düzeyleri ile iç içe geçen işlev zinciri başarısız arama bütün neden olur.Başvuru Yönetilen koddan herhangi birTransact-SQLkullanıcı tanımlı işlev 32 düzey iç içe geçmiş sınırı. karşı bir düzey olarak sayarYönetilen kod açılmak istenen yöntem bu sınırınızı etkiler değil.

CLR tablo değerli işlevler sıralama düzeni'ni kullanma

ORDER yan tümce CLR tablo değerli işlevler kullandığınızda, aşağıdaki yönergeleri izleyin:

  • sonuçlar her zaman belirtilen sırada sıralanır emin olmanız gerekir.sonuçlar olduğu belirtilen sıraya değilSQL ServerSorgu çalıştırıldığında hata iletisi oluşturur.

  • Bir ORDER yan tümce belirtilmezse, çıktı tablo değerli işlev (açık veya kapalı) sütunun harmanlama göre sıralanması gerekir.Örneğin, sütun harmanlama Çince (veya tablo değerli işlev için DDL belirtilen veritabanı harmanlama alınan) ise, döndürülen sonuçlar Çince sıralama kurallarına göre sıralanması gerekir.

  • The ORDER yan tümce, belirtilen her zaman doğrulanır tarafındanSQL Serversonuçlar döndüren sırasında olsun veya olmasın, tarafından kullanılır query processor yapmak daha fazla en iyi duruma getirme.Sipariş kullanmalısınız yan tümce sorguyu yürütmek için yararlı olduğunu biliyorsanız.

  • The SQL Server query processor takes advantage of the ORDER clause automatically in following cases:

    • ORDER yan tümce bir dizin uyumlu olduğu sorguları ekleyin.

    • ORDER BY yan tümce SIRASI ile uyumlu olan s yan tümce.

    • GROUP BY ile ORDER yan tümce uyumlu olduğu toplar.

    • DISTINCT toplam ayrı sütunlara ORDER yan tümcesiyle birlikte uyumlu olduğu.

Bir SELECT sorgusu yürütüldüğünde, ORDER BY de sorguda belirtilmediği sürece, ORDER yan tümce sıralı sonuçlar ile garanti etmez.Bkz:sys.function_order_columns (Transact-SQL)sorguya sütun hakkında bilgi için sıralama düzeni için tablo değerli işlevler yer

Meta veri

Aşağıdaki tabloda, kullanıcı tanımlı işlevler hakkında meta veriler döndürmek için kullanabileceğiniz sistem katalog görünümleri listeler.

Sistem görünümü

Açıklama

sql_dependencies

Tanımını görüntüler.Transact-SQLkullanıcı tanımlı işlevler.Örneğin:

Sql_dependencies kullanarak şifreleme seçeneğini kullanarak oluşturduğunuz işlevleri tanımını görüntülenemez; ancak, şifreli işlevleri hakkında diğer bilgiler görüntülenir.

sys.assembly_modules

CLR kullanıcı tanımlı işlevler hakkında bilgi görüntüler.

sys.Parameters

Kullanıcı tanımlı işlevler tanımlanan parametreleri hakkında bilgi görüntüler.

sys.sql_expression_dependencies

Bir işlev tarafından başvurulan temel nesneleri gösterir.

İzinler

Veritabanında CREATE FUNCTION izin ve işlev oluşturulacağı şema üzerinde ALTER iznine gerektirir.işlev Kullanıcı tanımlı bir türünü belirtir, yürütmek izni türü gerektirir.

Örnekler

C.ISO hafta hesaplayan bir tek değerli kullanıcı tanımlı işlev kullanma

Aşağıdaki örnek, kullanıcı tanımlı işlev oluştururISOweek.Bu işlev tarih baðýmsýz deðiþken alýr ve ISO hafta numarası hesaplar.Bu işlev doğru olarak hesaplamak içinSET DATEFIRST 1işlevi çağrılmadan önce çağrılması gerekir.

Kullanarak da örnek gösteriryürütmek AS yan tümce, saklı yordam yürütülen güvenlik bağlamı belirlemek için.Örnekte, seçeneğiCALLERbelirtir, yordamı yürütülen it. çağıran kullanıcı bağlamında, Belirlediğiniz diğer seçenekler SELF, sahip olduğu veuser_name.

İşte işlev çağrı.FarkDATEFIRSTküme1.

Here is the result set.

ISO hafta

----------------

52

B.Bir satır içi oluşturma tablo değerli işlev

Aşağıdaki örnek, bir satır içi tablo değerli işlev verir.Üç sütunu geri döndürürProductID,Nameve yıl tarih toplamları deposu olarak olarak toplamakYTD Total her ürünün satılan deposu.

Harekete geçirmek için işlev, bu sorguyu çalıştırın.

C.Bir multi-deyim oluşturma tablo değerli işlev

Aşağıdaki örnek, tablo değerli işlev oluştururfn_FindReports(InEmpID).Geçerli çalışan kimliği ile sağlanan işlev, doğrudan veya dolaylı olarak çalışanlar için bu raporun çalışana karşılık gelen bir tablo döndürür.işlev Çalışanların hiyerarşik listesi oluşturmak için bir yinelenen genel tablo ifade (CTE) kullanır.Yinelenen CTEs, daha fazla bilgi için bkz:WITH common_table_expression (Transact-SQL).

D.Oluşturma bir CLR işlev

Aşağıdaki örnek, varsayarSQL Server veritabanı altyapısı örnekleri yerel bilgisayarın varsayılan konuma yüklenir ve StringManipulate.csproj örnek uygulama derlendi.Daha fazla bilgi için bkz:Supplementary-Aware String Manipulation.

CLR işlev örnek oluştururlen_s.Önce işlev oluşturulur veya derlemeSurrogateStringFunction.dllkayıtlı yerel veritabanı.

DECLARE @SamplesPath nvarchar(1024);
-- You may have to modify the value of this variable if you have
-- installed the sample in a location other than the default location.
SELECT @SamplesPath = REPLACE(physical_name, 'Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\') 
    FROM master.sys.database_files 
    WHERE name = 'master';

CREATE ASSEMBLY [SurrogateStringFunction]
FROM @SamplesPath + 'StringManipulate\CS\StringManipulate\bin\debug\SurrogateStringFunction.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO

CREATE FUNCTION [dbo].[len_s] (@str nvarchar(4000))
RETURNS bigint
AS EXTERNAL NAME [SurrogateStringFunction].[Microsoft.Samples.SqlServer.SurrogateStringFunction].[LenS];
GO

Tablo deerli bir CLR ilevi oluşturma örneği için bkz:CLR tablo biçiminde işlevler.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

En iyi uygulamalar, işlev değil haline güncel olduğundan emin olmak için kullanılabilecek yöntemleri hakkında bilgi eklendi değişiklikleri temel, nesneler.