Aracılığıyla paylaş


SQL Server'da kullanıcı tanımlı türler kaydediliyor

In order to use a user-defined type (UDT) in Microsoft SQL Server, you must register it.udt kaydediliyor, derleme kaydediliyor ve veritabanında kullanmak istediğiniz türü oluşturma içerir.UDTs için tek bir veritabanı kapsamlı ve veritabanlarının her veritabanı ile aynı derleme ve udt kayıtlı sürece kullanılamaz.udt derleme kayıtlı ve oluşturulan türü udt içinde kullanabileceğiniz bir kez Transact-SQL ve istemci kodu.Daha fazla bilgi için bkz: clr kullanıcı tanımlı türler.

UDTs dağıtmak için Visual Studio kullanma

Kullanarak sizin udt dağıtmak için en kolay yolu olan Microsoft Visual Studio.Ancak, daha karmaşık dağıtım senaryoları ve en iyi esneklik için kullanmak Transact-SQL olarak açıklanan daha sonra bu konuda.

Oluşturma ve Visual Studio kullanarak bir udt dağıtmak için aşağıdaki adımları izleyin:

  1. Yeni bir oluşturmak veritabanı , proje Visual Basic veya Visual C# dil düğüm.

  2. Başvuru Ekle SQL Server veritabanını içerecek udt.

  3. Ekleme bir Programmability türü sınıfı.

  4. udt uygulamak için kod yazabilir.

  5. Dan Build menü seçin Deploy.Bu derleme kaydeder ve yazıyla oluşturur SQL Server veritabanı.

UDTs dağıtmak için Transact-sql kullanarak

The Transact-SQL CREATE ASSEMBLY syntax is used to register the assembly in the database in which you wish to use the UDT.Dahili olarak veritabanında depolanan sistem tabloları, dosya sistemindeki dışarıdan değil.udt dış birleştirmelere bağımlı ise, bunların çok veritabanına yüklenmiş olması gerekir.create type deyim udt kullanılmak üzere olduğu veritabanında oluşturmak için kullanılır.Daha fazla bilgi için bkz: DERLEME (Transact-sql) oluştur ve Tür (Transact-sql) oluştur.

create assembly kullanma

DERLEME oluşturma sözdizimi derleme udt kullanmak istediğiniz veritabanına kaydeder.Derleme kaydedildikten sonra bağımlıları yoktur.

Belirli bir veritabanında birden çok sürümünü aynı derleme oluşturma izin verilmez.However, it is possible to create multiple versions of the same assembly based on culture in a given database.SQL Server distinguishes multiple culture versions of an assembly by different names as registered in the instance of SQL Server.Daha fazla bilgi için bkz: "Oluşturma ve kullanma Strong-Named Derlemeler" içinde.net Framework sdk.

DERLEME oluşturmak için güvenli veya permission_set izni ile ne zaman yürütülür, derleme denetlenir doğrulanabilir olduğundan emin olun ve yazın güvenli ayarlar.İzin küme belirtme atlarsanız, güvenli kabul edilir.Güvenli olmayan bir izin küme koduyla kontrol edilir.Derleme izin kümeleri hakkında daha fazla bilgi için bkz: Assemblies tasarlama.

Örnek

Aşağıdaki Transact-SQL deyim noktası derlemede kaydeder SQL Server , AdventureWorks2008R2 veritabanıyla, güvenli bir izin küme.Not ile yan tümce tümce tümce atlanırsa, derleme güvenli izin küme ile kaydedilir.

USE AdventureWorks2008R2;
CREATE ASSEMBLY Point
FROM '\\ShareName\Projects\Point\bin\Point.dll' 
WITH PERMISSION_SET = SAFE;

Aşağıdaki Transact-SQL deyim kullanarak derleme kaydeder <assembly_bits> bağımsız değişkeninde from yan tümce tümce tümce.Bu varbinary değerini temsil eder akışı olarak dosya. bayt

USE AdventureWorks2008R2;
CREATE ASSEMBLY Point
FROM 0xfeac4 … 21ac78;

create type kullanma

Derleme veritabanına yüklendi olduktan sonra türünü kullanarak oluşturabilirsiniz Transact-SQL create type deyim.Bu tür o veritabanı için kullanılabilen türler listesine ekler.Veritabanı kapsam türü vardır ve türü yalnızca, oluşturulduğu veritabanında kullanılabilir.udt veritabanında zaten yer alıyor, create type deyim, bir hata ile başarısız olur.

Not

create type Sözdizimi de doğal oluşturmak için kullanılan SQL Server diğer ad veri türleri ve koymak amaçlanmıştır sp_addtype olacak bir oluşturma diğer ad veri türü.Bazı isteğe bağlı bağımsız değişkenler oluşturma türü sözdizimi UDTs oluşturma için başvurun ve (taban türü gibi) diğer ad ad veri türlerini oluşturmak için uygun değildir.

Not

İle başlayan 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.

Daha fazla bilgi için bkz: Tür (Transact-sql) oluştur.

Örnek

Aşağıdaki Transact-SQL deyim oluşturur Point türü.İki bölümlü adlandırma sözdizimini kullanarak dış adı belirtilen AssemblyName.UDTName.

CREATE TYPE dbo.Point 
EXTERNAL NAME Point.[Point];

Veritabanından bir udt kaldırma

type drop deyim bir udt geçerli veritabanından kaldırır.udt bırakılan sonra derleme veritabanından silmek için drop assembly deyim kullanabilirsiniz.

type drop deyim yok yürütmek aşağıdaki durumlarda:

  • udt kullanılarak tanımlanmış sütunlar içeren veritabanındaki tabloları.

  • İşlevler, saklı yordamlar veya değişkenler veya udt parametreleri kullanın Tetikleyiciler veritabanında olan ema BALAMA yan tümce tümce tümce ile oluşturuldu.

Örnek

Aşağıdaki Transact-SQL gerekir yürütmek aşağıdaki sipariş.İlk başvuran tablo Point udt gerekir bırakılan, sonra türü ve son olarak derleme.

DROP TABLE dbo.Points;
DROP TYPE dbo.Point;
DROP ASSEMBLY Point;

udt bağımlılıklar bulma

udt sütun tanımları içeren tablolar gibi bağımlı nesnelerin varsa type drop deyim başarısız olur.İşlevler, saklı yordamlar veya Tetikleyiciler değişkenler veya parametreler kullanıcı tanımlı tür Bu yordamlar kullanırsanız, ema BALAMA ile yan tümce tümce tümcesini kullanarak veritabanında oluşturulan varsa da başarısız olur.Tüm bağımlı nesneleri ilk olarak bırakın ve sonra type drop deyim yürütmek.

Aşağıdaki Transact-SQL sorgu tüm sütunları ve içinde bir udt kullanın parametreleri bulur AdventureWorks2008R2veritabanı.

USE Adventureworks2008R2;
SELECT o.name AS major_name, o.type_desc AS major_type_desc
     , c.name AS minor_name, c.type_desc AS minor_type_desc
     , at.assembly_class
  FROM (
        SELECT object_id, name, user_type_id, 'SQL_COLUMN' AS type_desc
          FROM sys.columns
     UNION ALL
        SELECT object_id, name, user_type_id, 'SQL_PROCEDURE_PARAMETER'
          FROM sys.parameters
     ) AS c;
  JOIN sys.objects AS o
    ON o.object_id = c.object_id;
  JOIN sys.assembly_types AS at
    ON at.user_type_id = c.user_type_id;

UDTs bakımını yapma

udt olarak oluşturulduktan sonra değişiklik yapamazsınız bir SQL Server türüne göre derleme değiştirebilirsiniz, ancak veritabanı,.Çoğu durumda, udt ile veritabanından kaldırmanız gerekir Transact-SQL type drop deyim, alttaki derleme değişiklik yap ve yeniden kullanarak alter assembly deyim.Sonra udt ve tüm bağımlı nesneler yeniden oluşturmanız gerekebilir.

Örnek

Kaynak kodu sizin udt derlemede yapılan değişiklikler ve bu çekirdekler sonra alter derleme deyim kullanılır.Bu .dll dosyasını sunucuya kopyalar ve yeni derleme için rebinds.Tam sözdizimini görmek alter assembly (Transact-sql).

Aşağıdaki Transact-SQL alter assembly deyim yeniden yükler Point.dll derleme belirtilen konumdan disk.

ALTER ASSEMBLY Point
FROM '\\Projects\Point\bin\Point.dll';

Kaynak kodu eklemek için alter assembly kullanma

Dosya Ekle yan tümce tümce tümcesini alter assembly sözdizimi oluşturmak DERLEME yok.Kaynak kodu veya derleme ile ilişkili dosyalar eklemek için kullanabilirsiniz.Dosyaları özgün konumlarına kopyalanır ve saklanan sistem tabloları veritabanı.Bu, her zaman kaynak kodunu veya diğer dosyaları yandan, bugüne kadar yeniden oluşturun veya geçerli sürüm udt belge gerekir sağlar.

Aşağıdaki Transact-SQL alter assembly deyim ekler Point.cs sınıfı kaynak kodu noktası udt.Bu Point.cs dosyasının içerdiği metni kopyalar ve onu "pointsource" adı altında bir veritabanında saklar.

ALTER ASSEMBLY Point
ADD FILE FROM '\\Projects\Point\Point.cs' AS PointSource;

Derleme bilgileri depolanır sys.assembly_files burada derleme yüklenmiş veritabanındaki tablo.The sys.assembly_files table contains the following columns.

  • assembly_id
    Derleme için tanımlanan tanıtıcısı.Bu sayı aynı ilgili tüm nesnelere atanmış derleme.

  • name
    Nesnenin adı.

  • file_id
    İlk nesnesiyle ilişkili her nesneyi tanımlayan bir numara bir verilen assembly_id değeri 1 verilen.Birden çok nesne ile aynı ilişkili olup olmadığını assembly_id, daha sonra sonraki file_id değeri 1 artırılır.

  • İçerik
    Derleme veya dosya onaltılık gösterimi.

cast kullanabilirsiniz ya da işlev içeriğini dönüştürmek için İçerik okunabilir metin sütunu.Point.cs dosyasının içeriğini aşağıdaki sorgu adı kısıtlamak için where yan tümce tümce tümcesini kullanarak okunabilir metin dönüştürür sonuç küme için tek bir satır.

SELECT CAST(content AS varchar(8000)) 
  FROM sys.assembly_files 
  WHERE name='PointSource';

sonuçlar metin düzenleyicisine kopyalayıp, satır sonları ve özgün vardı boşluk korunur olduğunu göreceksiniz.

UDTs ve Assemblies yönetme

UDTs şeklinizle planlarken, hangi yöntemlerin udt içinde gerekli olan göz önünde derleme kendisi ve hangi yöntemleri ayrı derlemelerde oluşturulmalı ve uygulanan kullanıcı tanımlı işlevler veya saklı yordamlar.Yöntemleri ayırarak ayrı derlemelerine update kodu udt sütun tablo içinde depolanabilir verileri etkilemeden sağlar.udt derleme udt sütunları bırakmadan değiştirmek ve yeni tanım imza türü ve eski değerler yalnızca okuyabilir, diğer bağımlı nesneleri değiştirmek değil.

Büyük ölçüde udt uygulamak için gerekli kodu değişebilir yordam kodunu ayıran bakım basitleştirir.udt için için gerekli olan kodu da dahil olmak üzere işlev, ve olabildiğince basit, udt tanımlarınızın güncel tutma udt kod değişiklikleri veya hata düzeltmeleri için veritabanından bırakılan gerekebilir riskini azaltır.

udt para ve para birimi dönüştürme işlevi

The Currency UDT in the AdventureWorks2008R2 sample database provides a useful example of the recommended way to structure a UDT and its associated functions.The Currency UDT is used for handling money based on the monetary system of a particular culture, and allows for storage of different currency types, such as dollars, euros, and so forth.udt sınıfı bir dize ve bir miktarda para bir kültür adı gösterir bir decimal veri türü.Tüm gerekli seri hale getirme yöntemleri sınıfını tanımlama derleme içinde yer alır.Uygulayan bir kültür'ndan başka bir para birimi dönüştürme işlevi adlı bir dış işlev uygulanan ConvertCurrency, bu işlevi ayrı bir bulunur ve derleme.The ConvertCurrency function does its work by retrieving the conversion rate from a table in the AdventureWorks2008R2 database.Dönüştürme oranları kaynak bugüne kadar değiştirmelisiniz veya olması gerektiğini, değişiklikleri varolan kodu derleme kolayca etkilemeden değiştirilebilir para udt.

İçin kod para udt ve ConvertCurrency işlevleri, ortak dil çalışma zamanı (clr) örnekler yükleyerek bulunabilir.Daha fazla bilgi için bkz: SQL Server Örnekleri ve Örnek Veritabanlarının Yüklenmesiyle İlgili Önemli Noktalar.

UDTs veritabanları arasında kullanma

UDTs için tek bir veritabanı kapsamlı tanım olarak.Bu nedenle, bir veritabanı içinde tanımlanan bir udt sütun tanımının başka bir veritabanında kullanılamaz.UDTs içinde birden çok veritabanı kullanmak için yürütmek aynı derlemeler üzerindeki her veritabanında DERLEME oluşturmak ve create type deyimleri.Derlemeler aynı adı, kesin ad, kültür, sürüm, izin küme ve ikili içeriği varsa aynı kabul edilir.

udt kayıtlı ve erişilebilir her iki veritabanı olarak kaydedildikten sonra kullanmak üzere başka bir veritabanından bir udt değer dönüştürebilirsiniz.Aynı UDTs veritabanları aşağıdaki senaryolarda üzerinden kullanılabilir:

  • Arama saklı yordam farklı veritabanlarında tanımlanan.

  • Farklı veritabanlarında tanımlanan tabloları sorgulanıyor.

  • udt verileri bir veritabanından seçerek tablo udt sütun ve onu ikinci bir veritabanına ile özdeş bir udt sütun ekleme.

Bu durumda, sunucu tarafından istenen herhangi bir dönüştürme otomatik olarak gerçekleşir.Kullanılarak açıkça dönüştürmeler gerçekleştirme olanağına sahip olmayan Transact-SQL TONUNU veya dönüştürme işlevleri.

Not herhangi olması gerekmez eylem kullanarak UDTs için zaman SQL Server Veritabanı Altyapısı İş tabloları oluşturur tempdb sistem veritabanı.Bu işleme imleçler, tablo değişkenlerini içerir ve UDTs, şeffaf içeren kullanıcı tanımlı tablo değerli işlevler olun kullanımı tempdb.Ancak, açıkça geçici tablo oluşturursanız, tempdb bir udt sütun tanımlayan, sonra udt kayıtlı olmalıdır tempdb aynı şekilde bir kullanıcı veritabanı olarak.

Ayrıca bkz.

Kavramlar