Aracılığıyla paylaş


Ntext, metin ve resim verileri yönetme

Important noteImportant Note:

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.Kullanımıvarchar(max),nvarchar(max), vevarbinary(max)veri türleri yerine.Daha fazla bilgi için bkz:Büyük değer veri türleri'ni kullanma.

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

, Birntext,text, veimageveri değeri ise artık Unicode 4.000 karakter, karakter, 8.000 karakter; veya 8.000 bayt ikili dize, değer başvurulan, SELECT, UPDATE ve INSERT deyimlerini çok aynı şekilde küçük veri türleri.Örneğin, birntextkısa bir değer sütun başvurulan bir deyim seçim listesinde aynı şekilde birnvarcharsütun başvuru., Doğrudan başvuracak biçimde alınamamasına gibi gözlenen gereken bazı kısıtlamalar birntext,text, orimagesütun bir WHERE yan tümce.Bu sütunlar bir WHERE yan tümce, ISNULL, DİZE ya da PATINDEX, veya bir IS NULL, NOT NULL, IS veya LIKE ifade başka bir veri türünü döndüren bir işlev parametreleri olarak dahil edilebilir.

Büyük veri değerleri işleme

,ntext,text, veimageveri değerleri Al daha büyük, ancak bunlar gerekir ele blok blok olarak.Her ikiTransact-SQLve veritabanı API işlevlerini uygulamalar çalışmak için izinntext,text, veimageveri blok blok.

Veritabanı API, uzun işleyecek şekilde ortak bir desen izleyinntext,text, veimagesütun:

  • Uzun bir sütunu okumak için uygulama yalnızca içerirntext,text, orimageseçin listesinde, sütun ve sütun veri. makul bir blok alacak kadar büyük program değişkene sonra bağlarUygulama deyim yürütür ve bağımlı değişken bir blok içinde birer birer veri almak için bir API işlev veya yöntem kullanır.

  • Uzun bir sütuna yazmak için bulundukları değer yerine bir parametre işaretçisi (?) ile bir INSERT veya UPDATE deyim uygulamayı yürütenntext,text, orimagesütun.Bir program değişken veri bloklarını saklamak için yeterli büyüklükte parametre işaretçisi (veya ADO durumunda, parametre) bağlıdır.Uygulama yeri ilk bağımlı değişken bir sonraki veri kümesini taşır ve ardından bir API işlev veya bu veri blok yazma yöntem çağırır bir döngüye gider.Bu, tüm veri değeri gönderilinceye kadar yinelenir.

Satırda metin kullanma

InSQL Server, kullanıcılar etkinleştirmek birsatır metintext, deposu; böylece Tablo seçeneğini ntext, ya da imageverileri, veri satırı.

Seçeneği etkinleştirmek için yürütmeksp_tableoption saklı yordamını, satırındaki metin belirlemek gibi seçenek adı ve , seçenek değeri. BLOB gibi ikili büyük nesne için bir satır olarak saklanabilir varsayılan en büyük boyututext,ntext, orimage256 bayt veri olduğu halde değerleri olabilir aralık 7000 ile 24 arasında.Varsayılan olmayan en büyük boyutu belirtmek için seçenek değeri olarak bir tamsayı aralığında belirtin.

text,ntext, orimagedize aşağıdaki koşullar geçerli veri satırında depolanır:

  • satır metin etkin.

  • Uzunluğu, dize belirtilen sınırdan daha kısa**@ OptionValue**

  • Veri satırında 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.

, Birtext,ntext, orimagedizesidir belirlenmiş sınırın veya kullanılabilir alan satırdaki büyük, işaretçileri satır yerine saklanır.Yine de satır BLOB dizeleri depolamak için koşulları hala geçerli: İşaretçiler. tutmak için veri satırında yeterli boş alan bulunmalıdır

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

Metin işaretçisi'ni kullanma

Sürecesatır metin seçeneği belirtilmişse, text, ntext, ya da imagedize veri satırı dışında depolanır; yalnızca bu dizeleri metin işaretçileri bulunan veri satırları.Metin işaretçisi işaretçilerinin iç, eşleme hangi dize parçaları sayfaları için yerleşik bir ağacın kök düğümünü gösterintext,ntext, veimageverileri, aslında saklandığı.

Satır metin işaretçisi içindeSQL Server 2000metin işaretçisi'nün önceki sürümlerinde farklıSQL Server.BLOB verileri için dosya tanıtıcısı gibi işaretçiler satır metin olarak davranır; önceki metin işaretçisi çalışması gibi BLOB verileri için adresleri.Bu nedenle, satır metin işaretçisi kullanırken, aşağıdaki özelliklere göz önünde bulundurun:

Important noteImportant Note:

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. Sayı

    En çok 1024 satır metin işaretçisi etkin veritabanı her hareketine izin verilir

  2. Kilitleme

    Bir kullanıcı bir etkin metin işaretçisi alırSQL Server 2000veri satırı kilitler ve başka bir kullanıcı, değiştirir veya siler ancak ilk kullanıcı olan satır sağlar. metin işaretçisi.Metin işaretçisi geçersiz olduğunda kilit serbest bırakılır.Bir metin işaretçi geçersiz kılmak içinsp_invalidate_textptr (Transact-SQL).

    Metin işaretçisi BLOB değerlerinin hareket yalıtım düzey kaydedilmemiş, okuma veya veritabanı olan salt okunur modda. güncelleştirmek için kullanılamaz

    SQL Server 2000veritabanını tek kullanıcı moduna. olursa veri satırı kilit

    , 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çisi, yalnızca bir işlem içinde geçerlidir.Bir hareketi kabul edilen metin işaretçisi geçersiz olur.

    Aşağıdaki eylemlerden herhangi birini yer alırken bir hareket içinde satır metin işaretçisi geçersiz:

    • oturum sonlandırır.

    • Veri satırı aynı hareketle silinir.(Diğer işlemleri üzerinde elde edilen kilit nedeniyle veri satırı silemezsiniz.)

    • Metin işaretçisi bulunduğu tablo şeması değiştirilir.Metin işaretçisi geçersiz kılmak, şema değiştirme eylemler şunlardır: oluşturmak veya silmek kümelenmiş dizin, değiştirme veya Tablo bırakma, tablonun kesiliyor, - sp_tableoptionsatırındaki metin seçeneğini değiştirmek ve yürütme sp_indexoption .

    Önceki örneği kullanarak aşağıdaki komut dosyası çözüm'ün önceki sürümlerindeSQL Server, ancak bir hata oluştururSQL 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
    

    InSQL Server 2000, satır metin işaretçisi bir hareket içinde kullanılmalıdır:

    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 Ekle tarafından oluşturulan null metin metin işaretçisi.Daha önce metin işaretçi NULL olarak yalnızca bir BLOB güncelleştirdikten sonra alabilirsiniz.

    Örneğin, aşağıdaki kod çalışmıyorSQL Server7.0, ancak çalışırSQL 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
    

    InSQL Server7.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

satır metin işaretçisi

Satır metin işaretçisi, olmayan

Sayı

En fazla etkin işlem başına veritabanı başına 1024.

Sınırsız.

Kilitleme

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

Kilit 'kaydedilmeyen okuma' hareketidir veya veritabanı 'tek kullanıcılı' veya 'salt okunur' modunda ise elde edilen değil.

Veri satırı kilitli değil.

SÜRE

İşlem veya satır silinir veya tablonun şeması değiştirilir, oturum sonunda geçersiz olur.

Satırın geçersiz olur.

null metin

Sonra sağ null metin ekleme edilebilir.

Yalnızca güncelleştirme sonra edilebilir.

Ntext, metin ve görüntü verileri ile veritabanı API kullanma

Bu, veritabanı API işleyecek şekilde özetintext,text, veimageveri:

  • ADO

    ADO eşlementext,text, orimagesütun veya parametre için birAlan or Parameter object.UseGetChunk yöntem bir saat ve AppendChunk veri bloğu sırasında bir kez. yöntem bir blok veriyi almak için

  • OLE DB

    OLE DB kullanırISequentialStream Destek ntext, arabirimini text, ve imageveri türleri.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. BLOBs ve OLE nesneleri

  • ODBC

    ODBC "veri-en-uzun veriler için ODBC veri türleriyle dağıtılacak yürütme" olarak adlandırılan bir özellik vardır: SQL_WLONGVARCHAR ( ntext), SQL_LONGVARCHAR ( text) ve SQL_LONGVARBINARY ( image).Bu veri türleri, bir program değişkenine bağlıdır.U , daha sonra teker teker uzun veri blok almak için çağrılır ve SQLPutData adı verilen bir saat. uzun veri blok göndermek için Daha fazla bilgi için bkz:Metin ve resim sütunlar'ı yönetme.

  • DB-Library

    DB Kitaplık uygulamaları da bağlamantext,text, veimagesütun 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şlevleridbwritetextUzun veri blok sırasında saat. dbupdatetext , dbmoretext kullanılır

    Not

    DB-Library ile satır metin erişen desteklenmez.

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