Share via


alter FUNCTION (Transact-sql)

Varolan bir değiştirir Transact-SQLveya izinleri değiştirmeden create FUNCTION deyimini yürüterek daha önceden oluşturulmuş ve bağımlı işlevler etkilemeden, saklı yordamlar veya Tetikleyiciler clr işlevi.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

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

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

CLR Functions
ALTER FUNCTION [ schema_name. ] function_name 
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
    [ WITH <clr_function_option> [ ,...n ] ]
    [ AS ] EXTERNAL NAME <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
    Kullanıcı tanımlı işlevin ait olduğu şemanın adıdır.

  • function_name
    Değiştirilecek kullanıcı tanımlı işlevidir.

    [!NOT]

    Bir parametre belirtilmese bile işlev adından sonra bir çift parantez gerekir.

  • **@**parameter_name
    Kullanıcı tanımlı işlevdeki bir parametredir. Bir veya daha fazla parametre bildirilebilir.

    Bir işlevin en çok 2.100 parametresi olabilir. Bildirilen her parametrenin değeri, parametre için varsayılan bir değer tanımlanmadıkça işlev yürütüldüğünde kullanıcı tarafından sağlanmalıdır.

    Parametre adını, ilk karakter olarak @ işaretini kullanarak belirtin. Parametre adı kuralları uymanız gerekir tanımlayıcıları. Parametreler işlevde yereldir; aynı parametre adları başka işlevlerde kullanılabilir. Parametreler yalnızca sabitlerin yerini alabilir; tablo adları, sütun adları veya başka veritabanı nesnelerinin adları olarak kullanılamaz.

    [!NOT]

    ANSI_WARNINGS, bir saklı yordam, kullanıcı tanımlı bir işlev parametreleri iletmek ya bildirmek ve toplu deyiminde değişkenleri ayarlamak zaman onur değil. Örneğin, bir değişken olarak tanımlanır, char(3), sonra üç karakterden daha büyük bir değere ayarlamak, veri tanımlı boyutunu ve INSERT kesilir veya update deyimi başarılı.

  • [ type_schema_name. ] parameter_data_type
    Parametrenin veri türünü ve isteğe bağlı olarak, ait olduğu şema olduğunu. İçin Transact-SQLİşlevler, kullanıcı tanımlı clr türleri de dahil olmak üzere tüm veri türleri dışında izin verilir timestampveri türü. clr işlevler için kullanıcı tanımlı clr türleri de dahil olmak üzere tüm veri türleri dışında izin text, ntext, image, ve timestampveri türlerini. Nonscalar türleri cursorve 'a tableparametre veri türü olarak belirtilemez Transact-SQLveya clr işlevleri.

    Eğer type_schema_namebelirtilmemiş, SQL Server 2005 Veritabanı Altyapısıarar parameter_data_typeaşağıdaki sırayla:

    • SQL Server sistem veri türleri adlarını içeren şema.

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

    • Dbo geçerli veritabanı şeması.

  • [ **=**default ]
    Parametrenin varsayılan değeridir. default bir değer tanımlanırsa, işlev parametre için bir değer belirtilmeden yürütülür.

    [!NOT]

    Varsayılan parametre değerleri için dışında clr işlevleri için belirtilebilir varchar(max)ve varbinary(max)veri türlerini.

    Fonksiyonu parametre varsayılan değeri olduğunda, varsayılan değer almak için işlevi çağrılırken varsayılan anahtar belirtilmelidir. Bu davranış, parametreyi dahil etmemenin varsayılan değer anlamına geldiği saklı yordamlardaki varsayılan değerli parametre kullanımından farklıdır.

  • return_data_type
    Skaler bir kullanıcı tanımlı işlevin döndürdüğü değerdir. İçin Transact-SQLİşlevler, kullanıcı tanımlı clr türleri de dahil olmak üzere tüm veri türleri dışında izin verilir timestampveri türü. clr işlevler için kullanıcı tanımlı clr türleri de dahil olmak üzere tüm veri türleri dışında izin text, ntext, image, ve timestampveri türlerini. Nonscalar türleri cursorve 'a tabledönüş veri türü olarak belirtilemez Transact-SQLveya clr işlevleri.

  • function_body
    Birlikte, bir tabloyu değiştirmek gibi bir yan etki üretmeyen bir dizi Transact-SQL deyiminin bir işlevin değerini tanımladığını belirtir. function_body yalnızca skaler işlevlerde ve tablo değerli çok deyimli işlevlerde kullanılır.

    Skaler işlevlerde function_body, birlikte skaler bir değer sonucunu veren bir dizi Transact-SQL deyimidir.

    İçinde çoklu deyimli tablo değerli işlevler, function_bodybir dizi Transact-SQLtablo doldurmak deyimleri değişken döndürür.

  • scalar_expression
    Skalar fonksiyon skalar değer döndüren belirtir.

  • TABLE
    Tablo değerli bir işlevin döndürdüğü değeri bir tablo olduğunu belirtir. Yalnızca sabitler ve **@**local_variables tablo değerli işlevlere geçilebilir.

    Satır içi tablo değerli işlevlerde, TABLE dönüş değeri tek bir SELECT deyimi ile tanımlanır. Satır içi işlevlerin ilişkili dönüş değişkenleri yoktur.

    Çoklu deyimli tablo değerli işlevler içinde **@**return_variable olan bir tablo değişkeni depolamak ve işlevin değeri olarak döndürülmelidir satırları toplamak için kullanılan. **@**return_variable yalnızca belirtilen Transact-SQLfonksiyonları ve değil için clr işlevleri.

  • select-stmt
    Satır içi tablo değerli bir işlevin dönüş değerini tanımlayan tek SELECT deyimidir.

  • external name <method_specifier>assembly_name.class_name.method_name
    Bir derlemenin işlev ile bağlanacak yöntemini belirtir. assembly_name, geçerli veritabanında SQL Server içinde var olan görünür durumdaki bir derleme ile eşleşmelidir. class_name geçerli bir SQL Server tanımlayıcısı olmalı ve derlemede bir sınıf olarak var olmalıdır. Sınıfın, ad alanlarını ayırmak için nokta (.) kullanan ad alanıyla nitelenmiş bir adı varsa, sınıf adının köşeli parantez ([ ]) veya çift tırnak işareti (" ") kullanılarak sınırlandırılması gerekir. method_name geçerli bir SQL Server tanımlayıcısı olmalı ve belirtilen sınıfta statik bir yöntem olarak var olmalıdır.

    [!NOT]

    SQL Server, varsayılan olarak CLR kodunu yürütemez. Oluşturmak, değiştirmek ve ortak dil Çalışma Zamanı Modülü başvuru veritabanı nesnelerini bırakın; Ancak, bu başvurular yürütülemiyor SQL Serverolanak kadar clr seçeneği etkin. Seçeneği etkinleştirmek için kullanın sp_configure.

    [!NOT]

    Bu seçenek içerilen bir veritabanında kullanılamaz.

  • <table_type_definition>( { <column_definition><column_constraint> | <computed_column_definition>} <table_constraint>] ,... n ])
    Bir Transact-SQL işlevinin tablo veri türünü tanımlar. Tablo bildirimi sütun tanımlarını ve sütun veya tablo kısıtlamalarını içerir.

  • <clr_table_type_definition > ( { column_namedata_type } [ ,...n ] )
    Bir CLR işlevinin tablo veri türlerini tanımlar. Tablo bildirimi yalnızca sütun adlarını ve veri türlerini içerir.

<function_option>:: = ve <clr_function_option>:: =

İşlev bir veya daha aşağıdaki seçenekleri olacak belirtir.

  • ENCRYPTION
    Gösteren Veritabanı AltyapısıKatalog görünümü sütunları alter FUNCTION deyimi metin içeren şifreler. ŞİFRELEME kullanarak bir parçası olarak yayınlanan işlevini engelleyen SQL Serverçoğaltma. Şifreleme clr işlevler için belirtilemez.

  • SCHEMABINDING
    İşlevin, başvurduğu veritabanı nesnelerine bağlı olduğunu belirtir. Diğer şema bağlı nesneler o başvuran bu durum değişiklikleri işlevi için engeller.

    İşlevin başvurduğu olan nesnelerle olan bağı, yalnızca aşağıdaki eylemlerden biri gerçekleştiğinde kaldırılabilir:

    • İşlev bırakıldığında.

    • İşlev, ALTER deyimi SCHEMABINDING seçeneği belirtilmeden kullanılarak değiştirilir.

    İşlev şema bağlı olabilir önce karşılanması gereken koşulları listesi için bkz: CREATE FUNCTION (Transact-SQL).

  • BOŞ GİRDİ NULL DÖNDÜRÜR | BOŞ GİRDİ OLARAK ADLANDIRILAN
    Belirtir OnNULLCall özniteliği bir skalar değerli işlev. Belirtilmezse, varsayılan olarak CALLED ON NULL INPUT verili kabul edilir. Bu, bağımsız değişken olarak NULL geçilse de işlev gövdesinin yürütüleceği anlamına gelir.

    returns null on null giriş bir clr işlevi belirtilmezse, bunu gösteren SQL Serverbirisi aldığı bağımsız değişkenler null, aslında işlev gövdesi yürütmesini olmadan boş döndürebilirsiniz. Eğer belirtilen yöntem <method_specifier> gösteren alter FUNCTION deyimi önceliklidir, returns null on null giriş, ama alter FUNCTION deyimini gösterir açık boş girdi olarak ADLANDIRILAN özel bir öznitelik zaten. OnNULLCall özniteliği clr tablo değerli işlevler için belirtilemez.

  • EXECUTE AS Yan Tümcesi
    Kullanıcı tanımlı işlevin kapsamında yürütüldüğü güvenlik bağlamını belirtir. Bu nedenle, hangi kullanıcı hesabını kontrol edebilirsiniz SQL Serverherhangi bir izinlerini doğrulamak için kullandığı veritabanı işlevi tarafından başvurulan nesneler.

    [!NOT]

    EXECUTE AS, satır içi kullanıcı tanımlı işlevler için belirtilemez.

    Daha fazla bilgi için, bkz. execute as yan tümcesi (Transact-sql).

< sütun_tanımı >::=

Tablo veri türünü tanımlar. Tablo bildirimi, sütun tanımlarını ve kısıtlamalarını içerir. CLR işlevlerinde, yalnızca column_name ve data_type belirtilebilir.

  • column_name
    Tablodaki bir sütunun adıdır. Sütun adları, tanımlayıcı kurallarına uymalı ve tabloda benzersiz olmalıdır. column_name, 1 ile 128 karakter arasında olabilir.

  • data_type
    Sütun veri türünü belirtir. Transact-SQL işlevlerinde, timestamp dışında kullanıcı tanımlı CLR türleri dahil tüm veri türleri kullanılabilir. CLR işlevlerinde, text, ntext, image, char, varchar, varchar(max) ve timestamp dışında, kullanıcı tanımlı CLR veri türleri dahil tüm veri türleri kullanılabilir.Skaler olmayan cursor türü ne Transact-SQL ne de CLR işlevlerinde sütun veri türü olarak belirtilemez.

  • DEFAULT constant_expression
    Bir ekleme sırasında açıkça bir değer sağlanmazsa, sütun için sağlanan değeri belirtir. constant_expression bir sabit, NULL veya sistem işlevi değeridir. DEFAULT tanımlar, IDENTITY özelliğine sahip olanlar dışında her sütuna uygulanabilir. DEFAULT tablo değerli CLR işlevleri için belirtilemez.

  • COLLATE collation_name
    Sütunun harmanlamasını belirtir. Belirtilmezse, sütuna veritabanının varsayılan harmanlaması atanır. Harmanlama adı bir Windows harmanlama adı veya bir SQL harmanlama adı olabilir. Listesi ve daha fazla bilgi için bkz: Windows harmanlaması adı (Transact-sql)ve SQL Server harmanlama adı (Transact-sql).

    collate yan tümcesi yalnızca sütunlarının alfabe değiştirmek için kullanılabilir char, varchar, nchar, ve nvarcharveri türlerini.

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

  • ROWGUIDCOL
    Yeni sütunun bir satır genel benzersiz tanımlayıcısı sütunu olduğunu belirtir. Tek bir uniqueidentifiersütun her tablo ROWGUIDCOL sütun olarak İçilir. ROWGUIDCOL özelliği yalnızca bir uniqueidentifier sütununa atanabilir.

    ROWGUIDCOL özelliği, sütunda depolanan değerleri benzersiz olmaya zorlamaz. Ayrıca, tabloya eklenen yeni satırlar için otomatik olarak değer de üretmez. Her sütunda benzersiz değerler üretmek için, INSERT deyimlerinde NEWID işlevini kullanın. Varsayılan bir değer belirtilebilir; ancak NEWID varsayılan olarak belirtilemez.

  • IDENTITY
    Yeni sütunun bir kimlik sütunu olduğunu belirtir. Tabloya yeni bir satır eklendiğinde, SQL Server, sütun için benzersiz bir artım değeri sağlar. Kimlik sütunları, tablonun benzersiz satır tanımlayıcısı görevini görmesi için tipik olarak PRIMARY KEY kısıtlamaları ile birlikte kullanılır. IDENTITY özelliği tinyint, smallint, int, bigint, decimal(p,0) veya numeric(p,0) sütunlarına atanabilir. Tablo başına yalnızca bir kimlik sütunu oluşturulabilir. Bağlı varsayılan değerler ve DEFAULT kısıtlamaları bir kimlik sütunu ile kullanılamaz. Hem seed hem de increment değerini belirtmeli veya hiçbirini belirtmemelisiniz. Hiçbiri belirtilmezse, varsayılan değer (1,1) olur.

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

    • seed
      Tablodaki ilk satıra atanacak tamsayı değeridir.

    • increment
      Tablodaki art arda satırlara için seed değerine eklenecek değerdir.

< sütun_kısıtlaması >::= ve < tablo_kısıtlaması>::=

Belirtilen bir sütun veya tablonun kısıtlamasını tanımlar. CLR işlevlerinde, izin verilen tek kısıtlama türü NULL'dır. Adlandırılmış kısıtlamalar kullanılamaz.

  • NULL | NOT NULL
    Sütunda null değerler olup olamayacağını belirler. NULL tam olarak bir kısıtlama değildir, ancak NOT NULL gibi belirtilebilir. NOT NULL, tablo değerli CLR işlevleri için belirtilemez.

  • PRIMARY KEY
    Belirtilen bir sütunun varlık bütünlüğünü benzersiz bir dizin yoluyla zorlayan bir kısıtlamadır. Tablo değerli kullanıcı tanımlı işlevlerde, PRIMARY KEY kısıtlaması, tablo başına yalnızca bir sütunda oluşturulabilir. PRIMARY KEY, tablo değerli CLR işlevleri için belirtilemez.

  • UNIQUE
    Belirli bir sütunda veya sütunlarda benzersiz bir dizin yoluyla varlık bütünlüğü sağlayan bir kısıtlamadır. Bir tablonun birden fazla UNIQUE kısıtlaması olabilir. UNIQUE, tablo değerli CLR işlevleri için belirtilemez.

  • CLUSTERED | NONCLUSTERED
    PRIMARY KEY veya UNIQUE kısıtlaması için kümelenmiş veya kümelenmemiş bir dizin oluşturulduğunu belirtir. PRIMARY KEY kısıtlamaları CLUSTERED, UNIQUE kısıtlamaları NONCLUSTERED kullanır.

    CLUSTERED yalnızca bir kısıtlama için belirtilebilir. UNIQUE bir kısıtlama için CLUSTERED belirtilir ve PRIMARY KEY kısıtlaması da ayrıca belirtilirse, PRIMARY KEY, NONCLUSTERED seçeneğini kullanır.

    CLUSTERED ve NONCLUSTERED, tablo değerli CLR işlevleri için belirtilemez.

  • CHECK
    Etki alanı bütünlüğünü bir sütuna veya sütunlara girilebilecek olası değerleri sınırlayarak zorlayan bir kısıtlamadır. CHECK kısıtlamaları, tablo değerli CLR işlevleri için belirtilemez.

    • logical_expression
      TRUE veya FALSE döndüren mantıksal bir ifadedir.

<hesaplanmış_sütun_tanımı>::=

Hesaplanan bir sütunu belirtir. Hesaplanan sütunlar hakkında daha fazla bilgi için, bkz. Tablo (Transact-sql) oluştur.

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

  • computed_column_expression
    Hesaplanan bir sütunun değerini tanımlayan bir ifadedir.

<dizin_seçeneği>::=

PRIMARY KEY veya UNIQUE dizini için dizin seçeneklerini belirtir. Dizin seçenekleri hakkında daha fazla bilgi için, bkz. Index (Transact-sql) oluştur.

  • PAD_INDEX = { ON | OFF }
    Dizin dolgusunu belirtir. Varsayılan değer OFF'tur.

  • FILLFACTOR = fillfactor
    Veritabanı Altyapısı uygulamasının dizin oluşturma veya değiştirme sırasında her dizin sayfasının yaprak düzeyini ne kadar dolu yapması gerektiğini gösteren bir yüzde belirtir. fillfactor, 1 ile 100 arasında bir tamsayı olmalıdır. Varsayılan 0'dır.

  • IGNORE_DUP_KEY = { ON | OFF }
    Bir ekleme işlemi benzersiz bir dizine yinelenen anahtar değerleri eklemeye çalıştığında verilecek hata yanıtını belirtir. IGNORE_DUP_KEY seçeneği yalnızca dizin oluşturulduktan veya yeniden oluşturulduktan sonraki ekleme işlemlerine uygulanır. Varsayılan değer OFF'tur.

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    Dağılım istatistiklerinin hesaplanıp hesaplanmayacağını belirtir. Varsayılan değer OFF'tur.

  • ALLOW_ROW_LOCKS = {ON | KAPALI}
    Satır kilidi kullanılıp kullanılamadığını belirtir. ON varsayılan değerdir.

  • ALLOW_PAGE_LOCKS = {ON | KAPALI}
    Sayfa kilidi kullanılıp kullanılamadığını belirtir. ON varsayılan değerdir.

Açıklamalar

Bir tablo değerli işlev bir skalar değerli işlev değiştirmek için alter FUNCTION kullanılamaz veya tam tersi. Çoklu deyimli bir işlev için bir satır içi işlevi değiştirmek için alter FUNCTION Ayrıca, kullanılamaz veya tam tersi. Değiştirmek için alter FUNCTION kullanılamaz bir Transact-SQLişlevi bir clr ilevi ya da tersi.

Aşağıdaki Service Broker deyimleri tanımına dahil edilemez bir Transact-SQLkullanıcı tanımlı fonksiyonu:

  • BEGIN DIALOG CONVERSATION

  • END CONVERSATION

  • GET CONVERSATION GROUP

  • MOVE KONUŞMA

  • RECEIVE

  • SEND

İzinler

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

Ayrıca bkz.

Başvuru

CREATE FUNCTION (Transact-SQL)

FUNCTION (Transact-sql) bırak

eventdata (Transact-sql)

Kavramlar

Yayını veritabanları üzerinde şeması değişiklikler yapmak