Zarządzanie ntext, tekst i obraz danych
Ważne: |
---|
Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.Użyj varchar(max), nvarchar(max), i varbinary(max) typy danych zamiast.Aby uzyskać więcej informacji, zobacz Duża wartość typów danych. |
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.Wartość pojedynczego danych jest zazwyczaj większe niż mogą być pobierane przez aplikację w jednym kroku; Niektóre wartości może być większy od pamięci wirtualnej na klient.Dlatego szczególne zwykle kroków, aby pobrać te wartości.
Jeśli ntext, text, i image wartość danych nie jest dłuższa niż Unicode, 4000 znaków; znak 8000 znaków; lub ciąg binarny 8000 bajtów może być wartością odwołanie w wybierz aktualizacji i WSTAW instrukcji znacznie taki sam sposób jak mniejszych typów danych.Na przykład ntext kolumna z wartością krótkich można odwoływać się w instrukcja SELECT wybierz listę samo nvarchar odwołanie do kolumna.Niektóre ograniczenia, które muszą być przestrzegane, takich jak uniemożliwić bezpośrednio ntext, text, lub image kolumna w klauzula WHERE.Kolumny te mogą zawierać jako parametry funkcja, która zwraca innego typu danych, takich jak ISNULL, PODCIĄG lub PATINDEX, lub jest NULL, nie jest NULL lub PODOBNYM wyrażenie w klauzula WHERE.
Obsługa większej wartości danych
Gdy ntext, text, i image wartości danych uzyskać większy, jednak muszą być obsługiwane na podstawie blok po bloku.Obie Transact-SQL i baza danych API zawiera funkcje, które umożliwiają aplikacjom do pracy z ntext, text, i image blok danych przez blok.
Bazy danych wykonaj API wspólnego wzorca sposoby obsługują długo ntext, text, i image kolumny:
Odczytać długości kolumna, po prostu zawiera aplikację ntext, text, lub image kolumna na liście select i następnie wiąże kolumna do zmiennej program przewyższającym uzasadnione blok danych.Następnie aplikacja wykonuje instrukcję i używa funkcja API lub metody do pobierania danych do powiązania zmiennej jeden blok w czas.
Zapisać długości kolumna, aplikacja wykonuje instrukcja INSERT lub UPDATE znacznik parametru (?), zamiast wartości umieszczone w ntext, text, lub image kolumna.Znacznik parametru (lub parametr w przypadek obiektów ADO) jest powiązany ze zmienną program przewyższającym bloki danych.Aplikacja przechodzi w pętli, gdzie go najpierw Przesuwa następny zestaw danych do powiązania zmiennej, a następnie wywołuje funkcja API lub metoda zapisu tego blok danych.Powtarza się aż do wartości danych została wysłana.
Używanie tekstu w wierszu
W SQL Server, użytkownicy mogą włączyć tekstu w wierszu opcji w tabela, można przechować text, ntext, lub image danych w jej wiersz danych.
Aby włączyć opcję, wykonać sp_tableoption procedura składowana, określanie tekstu w wierszu jako Nazwa opcji i na jako wartość opcji.Domyślny maksymalny rozmiar, które mogą być przechowywane w wierszu dla obiektu BLOB, duży obiekt binarny takich jak text, ntext, lub image danych, jest 256 bajtów, ale wartości może zakres od 24 do 7000.Aby określić maksymalny rozmiar, który nie jest domyślnym, należy określić liczbę całkowitą z zakres jako wartość opcji.
text, ntext, lub image ciągi są przechowywane w wierszu danych, jeśli mają zastosowanie następujące warunki:
tekst w wierszu jest włączone.
Długość ciąg jest krótszy niż limit określony w @ optionvalue
Brak miejsca w wierszu danych.
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.
Jeśli text, ntext, lub image ciąg jest większy niż określony limit lub miejsca w wierszu, wskaźniki są przechowywane w wierszu zamiast.Nadal jednak stosuje się warunki przechowywania ciągów BLOB w wierszu: Wiersz danych do przechowywania wskaźników musi być wystarczająca ilość miejsca.
Aby uzyskać więcej informacji, zobacz sp_tableoption (języka Transact-SQL).
Za pomocą wskaźników tekstu
Chyba że tekstu w wierszu określono opcję text, ntext, lub image ciągi są przechowywane poza wiersz danych; w rzędach danych znajdują się tylko wskaźniki tekst tych ciągów.Wskaźniki tekst, wskaż węzeł główny drzewa wbudowany wewnętrzny wskaźników, które mapują stron, w którym ciąg fragmenty, z text, ntext, i image , dane są przechowywane.
W wiersz tekstu wskaźniki w SQL Server 2000 różnią się od wskaźniki tekstu w starszych wersjach SQL Server.W wierszu tekstu wskaźniki zachowują się jak dojścia do plików dla danych typu BLOB; Funkcja wskaźniki wcześniejszych tekst jak adresy danych typu BLOB.W ten sposób używając w wiersz tekstu wskaźniki pamiętać następujące cechy:
Ważne: |
---|
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. |
Number
Maksymalnie 1024 aktywny w wiersz tekstu wskaźniki są dozwolone na transakcję na bazie danych.
Blokowanie
Gdy użytkownik uzyska wskaźnika aktywnego tekstu SQL Server 2000 blokuje wiersza danych i zapewnia żaden inny użytkownik modyfikuje lub usuwa wiersz, podczas gdy pierwszy użytkownik posiada wskaźnik tekstowy.Blokada jest zwalniana, gdy wskaźnik tekst staje się nieprawidłowy.Aby unieważnić wskaźnik tekstu, użyj sp_invalidate_textptr (języka Transact-SQL).
Wskaźnik tekstu nie można zaktualizować wartości BLOB, gdy poziom izolacji transakcji jest Odczyt nieprzekazany lub baza danych jest w trybie tylko do odczytu.
SQL Server 2000nie blokada wiersz danych, jeśli baza danych jest tryb jednego użytkownika.
Aby zilustrować podane w poniższej tabela:
CREATE TABLE t1 (c1 int, c2 text) EXEC sp_tableoption 't1', 'text in row', 'on' INSERT t1 VALUES ('1', 'a')
Powiodą się następujących transakcji:
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
Niepowodzenie następujących transakcji:
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
Czas trwania
W wierszu tekstu wskaźniki są prawidłowe tylko w obrębie transakcji.Transakcja została zatwierdzona, wskaźnik tekst staje się nieprawidłowy.
W obrębie transakcji w wierszu tekstu wskaźniki można unieważnione gdy dowolne z następujących czynności mają miejsce:
Kończy sesja.
Skreśla się wiersz danych w tej samej transakcji.(Inne transakcje nie można usunąć wiersza danych z powodu blokada uzyskane na nim.)
Schemat tabela, w którym znajduje się kursor tekstowy jest zmieniany.Zmiana schematu akcje, które wskaźniki tekstu unieważnia obejmują: Tworzenie lub usuwaniem indeks klastrowany, zmieniając lub upuszczanie tabela Obcinanie tabela Zmiana tekstu w wierszu opcji przez sp_tableoptionoraz wykonywanie sp_indexoption.
Korzystanie z poprzedniego przykładu poniższy skrypt będzie działać w starszych wersjach SQL Server, ale zostanie wygenerowany błąd w 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
W SQL Server 2000, w wierszu tekstu wskaźnik muszą być używane wewnątrz transakcji:
BEGIN TRAN DECLARE @ptrval varbinary(16) SELECT @ptrval = TEXTPTR(c2) FROM t1 WHERE c1 = 1 READTEXT t1.c2 @ptrval 0 1 COMMIT
Tekst NULL
Można uzyskać w wierszu tekstu wskaźnik na NULL tekst, który jest generowany przez wstawianie.Wcześniej wskaźniki tekstu można uzyskać dopiero po aktualizacji obiektu BLOB wartości null.
Na przykład, poniższy kod nie działa w SQL Server 7.0, ale działa w 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
W SQL Server 7.0, należy wykonać następujące czynności:
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'
Ta tabela zawiera podsumowanie różnic.
Różnica |
w wierszu tekstu wskaźnik |
Inne niż w wiersz tekstu wskaźnik |
---|---|---|
Number |
Maksymalnie 1024 aktywnego na transakcję na bazie danych. |
Nieograniczona. |
Blokowanie |
Wiersz danych jest s zablokowane, aż wskaźnik zmieni się nieprawidłowy. Blokady nie są uzyskiwane, gdy transakcja jest "Odczyt nieprzekazany" lub baza danych jest pojedynczy użytkownik lub "tylko do odczytu" tryb. |
Wiersz danych nie jest zablokowany. |
Czas trwania |
Staje się nieprawidłowy na końcu sesja, gdy wiersz został usunięty lub zmiany schematu tabela lub transakcji. |
Gdy zostanie usunięty wiersz staje się nieprawidłowy. |
Tekst NULL |
Możliwe do uzyskania prawa po wstawieniu tekstu NULL. |
Możliwe do uzyskania po aktualizacji. |
Ntext, tekst i obraz danych przy użyciu interfejsów API bazy danych
Jest to podsumowanie sposoby obsługi bazy danych API ntext, text, i image danych:
ADO
ADO można mapować ntext, text, lub image kolumn lub parametrów do pola lub parametr obiektu.Użyj GetChunk metoda pobierania danych jeden blok czas i AppendChunk metoda zapisu danych jeden blok czas.
OLE DB
OLE DB używa ISequentialStream interfejs obsługi ntext, text, i image typów danych.ISequentialStream::Read metoda odczytuje danych long jeden blok czas, i ISequentialStream::Write zapisuje dane długi do bazy danych jeden blok czas.Aby uzyskać więcej informacji, zobacz Liczba bloków BLOB i obiekty OLE
ODBC
Funkcja o nazwie "danych na wykonanie" ma ODBC do czynienia z typami danych ODBC dla danych long: SQL_WLONGVARCHAR (ntext), SQL_LONGVARCHAR (text) i SQL_LONGVARBINARY (image).Te typy danych są powiązane z programu zmienna.Procedura SQLGetData jest następnie wywoływana do pobierania danych long jeden blok czas, i SQLPutData nazywa się wysłać jeden blok danych long czas.Aby uzyskać więcej informacji, zobacz Zarządzanie tekst i obraz kolumn.
Biblioteki DB
Biblioteki DB aplikacji również powiązać ntext, text, i image kolumny do zmiennych programu.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.Funkcje takie jak dbwritetext, dbupdatetext, i dbmoretext służą do zapisywania danych long jeden blok czas.
Ostrzeżenie
Dostęp do wiersza tekstu z biblioteki DB nie jest obsługiwany.
Aby uzyskać więcej informacji, zobacz Tekst i obraz funkcje (Transact-SQL).