Ntext, metin ve resim veri yönetme

Önemli notÖnemli

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.Use varchar(max), nvarchar(max), ve varbinary(max) veri türleri yerine.Daha fazla bilgi için bkz: Büyük değer veri türleri'ni kullanma.

The SQL Server ntext, text, and image data types are capable of holding extremely large amounts of data, up to 2 GB, in a single value.Tek veri değeri tek bir adımda bir uygulama tarafından alınan genellikle büyüktür; Bazı değerler üzerinde kullanılabilir sanal bellek daha büyük olabilir istemci.Bu nedenle, özel adımlar genellikle bu değerleri almak için gereklidir.

Yoksa bir ntext, text, ve image veri değeri Unicode 4.000 karakter; daha uzun karakter, 8.000 karakter; 8.000 bayt ikili dize değeri olabilir veya Seç içinde başvurulan, GÜNCELLEŞTİRMEK ve ifadeleri çok daha küçük veri türleri aynı şekilde yerleştirin.Örneğin, bir ntext kısa bir değer sütunu başvurulabilir bir deyim seçme listesinde aynı şekilde bir nvarchar sütun başvuru yaptığı.Doğrudan başvuracak alınamamasına gibi tutulması gereken bazı kısıtlamalar bir ntext, text, veya image sütun bir where yan tümce tümce tümce.Bu sütunları bir where yan tümce tümce tümcesinde başka bir veri, IsNull, alt DİZE veya PATINDEX gibi veya bir IS null, IS not null, yazın veya gibi döndüren bir işlev parametre olarak dahil edilebilir ifade.

Daha büyük veri değerleri işleme

Zaman ntext, text, ve image daha büyük veri değerleri almak için ancak, bunlar gerekir işlenecek bir blok blok için ayrı ayrı.Her ikisi de Transact-SQL ve veritabanı API işlevleri uygulamaları ile çalışma izin ntext, text, ve image veri bloğu tarafından blok.

Veritabanı API bunlar ele uzun yoldan ortak bir yol izler ntext, text, ve image sütun:

  • Uzun bir sütun okumak için uygulama basitçe içerir ntext, text, veya image sütun seçme listesinde ve sonra bir program değişken makul bir blok veriyi tutacak büyük sütun bağlarUygulama daha sonra deyimini yürütür ve ilişkili değişken bir bloğu içine verileri almak için bir API işlev veya yöntem kullanır bir saat.

  • Uzun bir sütun yazmak için yerleştirilmesi için değeri yerine bir parametre işaretçisi (?) içeren bir INSERT veya update deyim uygulama yürütür ntext, text, veya image sütun.Parametre işaretçisi (veya parametresinde durum , ado) bir program değişken veri bloklarını tutacak büyüklükte bağlıdır.Uygulama yeri, ilk sonraki veri küme bağımlı değişkenin taşır ve ardından bir API işlev veya, yazma yöntem çağırır bir döngüye giriyor blok veri.Tüm veri değeri gönderilinceye kadar yinelenir.

Satırda metin kullanma

De SQL Server, kullanıcılar etkinleştirebilir bir satırındaki metin üzerinde seçenek bir tablo saklamak böylece text, ntext, veya image verileri, veri satırı.

Seçeneği etkinleştirmek için yürütmek sp_tableoption saklı yordam, belirten satırındaki metin seçenek adı olarak ve , seçenek değeri olarak.Depolanabilecek bir satırda bir blob (ikili büyük nesne) için gibi varsayılan en fazla boyut text, ntext, veya image verileri, 256 bayt olsa da, değerleri olabilir aralık 24'ten 7000.Varsayılan olmayan en büyük boyutu belirtmek için bir tamsayı içinde belirtmek aralık seçenek değeri olarak.

text, ntext, veya image dizeleri saklanır veri satırında aşağıdaki koşullar geçerliyse:

  • satırda metin etkindir.

  • Uzunluğu dize içinde belirtilen sınırdan daha kısadır @ optionvalue

  • Veri satırı kullanılabilir yeterli alan yok.

When BLOB strings are stored in the data row, reading and writing the text, ntext, or image strings can be as fast as reading or writing character and binary strings.SQL Server does not have to access separate pages to read or write the BLOB string.

Yoksa bir text, ntext, veya image dize belirtilen sınırın veya satır kullanılabilir alana büyük, işaretçiler saklanır satır yerine.Satırda DAMLA dizeleri depolamak için koşulları yine de yine de uygulanır: İşaretçiler tutmak için veri satırı yeterli boş alan olmalıdır.

Daha fazla bilgi için bkz: sp_tableoption (Transact-sql).

Metin işaretçiler kullanma

Sürece satırındaki metin seçeneği belirlendiğinde, text, ntext, veya image ; veri satırı dışında dizeleri saklanır Bu dizeleri yalnızca metin işaretçiler veri satırları bulunur.Metin işaretçiler işaret, hangi dize parçaları sayfalarında eşleştirmek iç işaretçiler yerleşik bir ağaç kök düğüme text, ntext, ve image verileri, aslında saklı.

Satır metin işaretçiler de SQL Server 2000 metin işaretçiler önceki sürümlerinde farklı olduğunu SQL Server.Satır metin işaretçiler blob verileri için dosya tanıtıcısı gibi davranır; önceki metin işaretçiler işlev blob verileri için adresleri gibi.Bu nedenle, satır metin işaretçiler kullanırken, aşağıdaki özelliklere göz önünde bulundurun:

Önemli notÖnemli

Although in-row text is allowed in a cursor, an in-row text pointer is not.SQL Server returns error 328 if you attempt to declare a cursor that contains an in-row text pointer.

  1. Number

    Hareket başına veritabanı başına en çok 1024 etkin satır metin işaretçiler verilir.

  2. Kilitleme

    Bir kullanıcı bir etkin metin işaretçisi aldığında, SQL Server 2000 veri satırı kilitler ve sağlar başka bir kullanıcı iken ilk kullanıcı var. metin imleci satır siler veya değiştirirkilit Metin işaretçisi geçersiz hale geldiğinde serbest bırakılır.Metin işaretçisi geçersiz kılmak için sp_invalidate_textptr (Transact-sql).

    Metin imleci DAMLA güncelleştirmek için kullanılamaz olduğunda değerleri yalıtım düzey , hareket kaydedilmeyen okuma veya salt okunur modda veritabanıdır.

    SQL Server 2000yok kilit veritabanı tek kullanıcı modu ise, veri satır.

    , Aşağıda verilen göstermek için tablo:

    CREATE TABLE t1 (c1 int, c2 text)
    EXEC sp_tableoption 't1', 'text in row', 'on'
    INSERT t1 VALUES ('1', 'a')
    

    Aşağıdaki işlem başarısız olur:

    INSERT t1 VALUES ('1','This is text.')
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    GO
    BEGIN TRAN
    DECLARE @ptr varbinary(16)
    SELECT @ptr = textptr(c2)
    FROM t1
    WHERE c1 = 1;
    READTEXT t1.c2 @ptr 0 5
    COMMIT TRAN
    GO
    

    Aşağıdaki işlem başarısız olur:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    GO
    BEGIN TRAN
    DECLARE @ptr varbinary(16)
    SELECT @ptr = textptr(c2)
    FROM t1
    WHERE c1 = 1
    WRITETEXT t1.c2 @ptr 'xx'
    COMMIT TRAN
    GO
    
  3. Süre

    Satır metin işaretçiler yalnızca bir hareket içinde geçerlidir.Bir işlem, metin işaretçisi geçersiz olur.

    Aşağıdaki eylemlerden herhangi birini gerçekleştiğinde işaretçi bir hareket içinde satır metin geçersiz kılınmasına:

    • oturum sonlandırır.

    • Verileri satır aynı hareketle silinir.(Diğer hareketleri üzerinde elde edilen kilit nedeniyle veri satırı silemezsiniz.)

    • Metin işaretçisi bulunduğu bir tablo şemasını değiştirilir.Metin işaretçiler geçersiz kılmak şema değiştirme eylemler şunlardır: oluşturma veya bırakarak kümelenmiş dizin değiştirme veya değiştirme tablo kesiliyor, tabloyu bırakarak, satırındaki metin seçeneği ile sp_tableoptionve yürütme sp_indexoption.

    Önceki örneği kullanarak, aşağıdaki komut dosyası önceki sürümlerinde çalışır SQL Server, ancak bir hata oluşturur SQL Server 2000.

    DECLARE @ptrval varbinary(16)
    PRINT 'get error here'
    SELECT @ptrval = TEXTPTR(c2)
    FROM t1
    WHERE c1 = 1
    READTEXT t1.c2 @ptrval 0 1
    

    De SQL Server 2000, satır metin imleci bir işlem içinde kullanılması gerekir:

    BEGIN TRAN
    DECLARE @ptrval varbinary(16)
    SELECT @ptrval = TEXTPTR(c2)
    FROM t1
    WHERE c1 = 1
    READTEXT t1.c2 @ptrval 0 1
    COMMIT
    
  4. null metin

    İçinde bir satır elde edebilirsiniz metin işaretçi null INSERT tarafından oluşturulan metin üzerinde.Daha önce null olarak yalnızca bir DAMLA güncelleştirdikten sonra metin işaretçiler elde edebilirsiniz.

    Örneğin, aşağıdaki kod çalışmaz SQL Server ama works 7.0 SQL Server 2000.

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    GO
    INSERT INTO t1 VALUES (4, NULL)
    BEGIN TRAN
    DECLARE @ptrval VARBINARY(16)
    SELECT @ptrval = TEXTPTR(c2)
    FROM t1
    WHERE c1 = 4
    WRITETEXT t1.c2 @ptrval 'x4'
    COMMIT
    

    De SQL Server 7.0, aşağıdakileri yapmanız gerekir:

    INSERT INTO t1 VALUES (4, NULL)
    UPDATE t1 
       SET c2 = NULL 
       WHERE c1 = 4
    DECLARE @ptrval VARBINARY(16)
    SELECT @ptrval = TEXTPTR(c2)
    FROM t1
    WHERE c1 = 4
    WRITETEXT t1.c2 @ptrval 'x4'
    

Bu tablo farkları özetler.

Fark

içinde satır metin imleci

Satır metin imleci içinde olmayan

Number

En çok 1024 hareket başına veritabanı başına etkin.

Sınırsız.

Kilitleme

Veri satırı geçersiz işaretçi şeklini alıncaya kadar s kilitli.

Hareket 'kaydedilmeyen okuma', veya 'tek kullanıcılı' veritabanı kilitleri alınır ' salt okunur ' mod.

Veri satırı kilitli.

Süre

Hareket veya ne zaman bir satır silinir veya Tablo şeması değiştirildiğinde oturum sonunda geçersiz olur.

Satır silindiğinde geçersiz olur.

null metin

BOŞ metin Ekle hemen sonra elde edilebilir.

Yalnızca güncelleştirme sonra elde edilebilir.

Ntext, metin ve resim veri veritabanı API ile kullanma

Bu API'ler veritabanı işlemek yolları özetini, ntext, text, ve image veriler:

  • ADO

    ado eşleme ntext, text, veya image sütun veya parametre bir alan veya parametresi nesne.Use GetChunk yöntem bir bloğu veri almak için bir saat ve AppendChunk yöntem, veri bloğu sırasında yazmak için bir saat.

  • OLE DB

    ole db kullanır ISequentialStream desteklemek için arabirim ntext, text, ve image veri türü.The ISequentialStream::Read method reads the long data one block at a time, and ISequentialStream::Write writes the long data to the database one block at a time.Daha fazla bilgi için bkz. BLOB ve ole nesneleri

  • ODBC

    odbc "veri-sırasındaki-" adı verilen bir özellik vardır. Uzun veri için odbc veri türleri ile başa çıkma konusunda: sql_wlongvarchar (ntext), sql_longvarchar (text) ve SQL_LONGVARBINARY (image).Bu veri türleri için bir program değişken bağlıdır.U sonra uzun bir bloğu veri almak için adlı bir saat, ve SQLPutData uzun veri bloğu sırasında göndermek için adı verilen bir saat.Daha fazla bilgi için bkz: Metin ve resim sütunlar yönetme.

  • db-Library

    db Kitaplık uygulamaları da bağlama ntext, text, ve image sütunlar için program değişkenleri.The DB-Library function dbtxtptr is used to get a pointer to the location of the long column occurrence in the database.dbreadtext is used to read the long data one block at a time.Gibi işlevleri dbwritetext, dbupdatetext, ve dbmoretext uzun veri bloğu sırasında yazmak için kullanılan bir saat.

    Not

    db-Library ile satır metin erişme desteklenmiyor.

Daha fazla bilgi için bkz: Metin ve resim işlevler (Transact-sql).