Zarządzanie ntext, tekst i obraz danych
Important 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. Użycie varchar(max), nvarchar(max), a varbinary(max) Zamiast tego typy danych. Aby uzyskać więcej informacji zobaczUsing Large-Value Data Types. |
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.Wartość jednego danych jest zazwyczaj większa, niż mogą być pobierane przez aplikację w jednym kroku, niektóre wartości może być większy od pamięci wirtualnej na komputerze klienckim.W związku z tym specjalnych kroków zazwyczaj są wymagane w celu pobrania tych wartości.
Jeśli ntext, text, a image wartość danych jest dłuższa niż Unicode, 4 000 znaków; znak, 8000 znaków; lub ciąg binarny 8000 bajtów, wartość może odwoływać się w instrukcji SELECT, UPDATE i INSERT ten sam sposób jak mniejszych typy danych. Na przykład ntext kolumna z wartością krótkie można odwoływać się liście select instrukcja SELECT w taki sam sposób nvarchar Odwołanie do kolumna. Niektóre ograniczenia, które muszą być spełnione, na przykład uniemożliwić bezpośrednio odwołać ntext, text, lub image Kolumna w klauzula WHERE. Te kolumny można uwzględnić w klauzula WHERE jako parametry funkcja, która zwraca innego typu danych, takich jak ISNULL, SUBSTRING lub PATINDEX, lub w IS NULL, IS NOT NULL lub LIKE wyrażenie.
Obsługa większe wartości danych
Gdy ntext, text, a image Uzyskiwanie większych wartości danych, jednak muszą one być obsługiwane na podstawie blok po bloku. Oba Transact-SQL i baza danych zawiera interfejsy API funkcji, które pozwalają aplikacjom do pracy z ntext, text, a image blok po blok danych.
Bazy danych interfejsów API postępuj według wspólnego wzorca z metod ich obsługi długich ntext, text, a image kolumny:
Do czytania długości kolumny, po prostu zawiera aplikację ntext, text, lub image kolumny na liście wybierz opcję, a następnie jest powiązana kolumna zmienną program przewyższającym rozsądne blok danych. Aplikacja następnie wykonuje instrukcję i używa metoda lub funkcja interfejsu API programu do pobierania danych do zmiennej związany jeden blok w danej chwili.
Aby napisać długości kolumny, aplikacja wykonuje instrukcja INSERT lub UPDATE znacznik parametru (?) zamiast wartości mają być umieszczone w ntext, text, lub image Kolumna. Znacznik parametru (lub parametru ADO) jest związany ze zmienną program przewyższającym bloki danych.Aplikacja przechodzi do pętli, gdzie go najpierw Przenosi następny zestaw danych do zmiennej związanego, a następnie wywołuje metoda, aby zapisać ten blok danych lub funkcja interfejsu API programu.To jest powtarzany, dopóki wartość danych została wysłana.
Używanie tekstu w wierszu
W SQL Server, aby umożliwić użytkownikom tekst w wierszu Opcja tabela, tak aby można je przechować text, ntext, lub image dane w jej wierszu danych.
Aby włączyć tę opcję, należy wykonać sp_tableoption przechowywanej procedury, określając tekst w wierszu jako nazwy opcji i na jako wartość opcji.Domyślna maksymalnego rozmiaru, które mogą być przechowywane w wierszu dla obiektu BLOB duży obiekt binarny takich jak text, ntext, lub image dane, to 256 bajtów, ale wartości może w zakresie 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 znaków są przechowywane w wiersz danych, jeśli mają zastosowanie następujące warunki:
tekst w wierszu jest włączona.
Długość ciąg jest krótszy niż limit określony w @ OptionValue
Brak wystarczającej ilości 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 ilość wolnego miejsca, w wierszu, wskaźniki są przechowywane w wierszu w zamian. Nadal jednak zastosowanie warunków do 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 zobaczsp_tableoption (Transact-SQL).
Za pomocą wskaźników tekstu
Chyba że tekst w wierszu opcja zostanie określona, text, ntext, lub image ciągi znaków są przechowywane poza wiersza danych; tylko wskaźniki tekstu do tych ciągów znajdują się w wierszy danych. Tekst łącza wskaż węzła głównego drzewa wbudowany wewnętrzny wskaźników, które są mapowane do stron, w którym fragmenty ciągów z text, ntext, a image dane są przechowywane.
W wiersz tekstu wskaźniki w SQL Server 2000 różnią się od wskaźniki tekstu we wcześniejszych wersjach SQL Server. W wierszu tekstu wskaźniki zachowują się jak dojścia do plików danych BLOB; wcześniej wskaźniki tekst działają podobnie jak adresy z danymi BLOB.W ten sposób w przypadku korzystania z w wiersz tekstu łącza, należy pamiętać następujące cechy:
Important 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. |
Liczba
Maksymalnie 1024 aktywny w wiersz tekstu wskaźniki są dozwolone dla określonej transakcji dla bazy danych.
Blokowanie
Gdy użytkownik uzyskuje wskaźnika aktywnego tekstu SQL Server 2000 blokuje wiersza danych i zapewnia żaden inny użytkownik modyfikuje lub usuwa wiersz, a wskaźnik tekst dla pierwszego użytkownika. Blokada jest zwalniany, kiedy wskaźnik tekst staje się nieprawidłowy.Aby unieważnić wskaźnik tekstu, należy użyć sp_invalidate_textptr (Transact-SQL).
Wskaźnik tekstu nie można zaktualizować wartości BLOB, gdy poziom izolacji transakcji jest odczytywany niezakończone lub baza danych jest w trybie tylko do odczytu.
SQL Server 2000 nie blokuje wiersz danych, jeśli baza danych jest tryb jednego użytkownika.
Aby zilustrować, biorąc pod uwagę w następującej tabela:
CREATE TABLE t1 (c1 int, c2 text) EXEC sp_tableoption 't1', 'text in row', 'on' INSERT t1 VALUES ('1', 'a')
Powiedzie 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 jest zatwierdzona, wskaźnik tekst staje się nieprawidłowy.
W obrębie transakcji w wierszu tekstu wskaźników może unieważnia się, gdy dowolne z następujących czynności miejsce:
Sesja kończy się.
Wiersz danych jest usuwany w tej samej transakcji.(Inne transakcje nie można usunąć wiersza danych z powodu blokada na jej.)
Schemat tabela, w którym znajduje się wskaźnik tekstu zostanie zmieniony.Zmiana schematu działania, które unieważnić wskaźniki tekst obejmować: utworzenie lub usunięcie indeks klastrowany, zmieniania lub usuwania w tabela Obcinanie tabela Zmiana tekst w wierszu Opcja za pośrednictwemsp_tableoptiona wykonującegosp_indexoption.
Korzystając z poprzedniego przykładu, następujący skrypt będzie działać w starszych wersjach SQL Server, ale spowoduje wystąpienie błędu 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 wiersz tekstu wskaźnik musi być używana 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 wierszem tekstu wskaźnik myszy na wartości NULL tekst, który jest generowany przez INSERT.Wcześniej wskaźniki tekstu można uzyskać dopiero po aktualizacji BLOB wartości null.
Na przykład poniższy kod nie jest dostępna 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 zestawienie różnic.
Różnica |
w wierszu tekstu wskaźnik |
Inne niż w wiersz tekstu wskaźnik |
---|---|---|
Liczba |
Maksymalnie 1024 aktywne dla określonej transakcji dla bazy danych. |
Nieograniczony. |
Blokowanie |
Wiersz danych jest S zablokowane, aż wskaźnik zmieni się nieprawidłowy. Blokady nie są uzyskiwane, gdy transakcja jest 'czytanie nieprzydzielonych' lub baza danych jest "pojedynczego użytkownika" lub w trybie 'tylko do odczytu'. |
Wiersz danych nie jest zablokowany. |
Czas trwania |
Staje się nieprawidłowy na koniec transakcji lub sesja, kiedy wiersz zostanie usunięty lub schematu tabela zostanie zmieniona. |
Gdy zostanie usunięty wiersz staje się nieprawidłowy. |
Tekst NULL |
Możliwe do uzyskania zaraz po wstawiania tekstu wartość NULL. |
Możliwe do uzyskania dopiero po aktualizacji. |
Ntext, tekst i obraz danych przy użyciu interfejsów API bazy danych
Jest to podsumowanie sposoby obsługi interfejsów API bazy danych ntext, text, a image dane:
ADO
Można mapować ADO ntext, text, lub image kolumny lub parametry pole or Parametr obiektu.Użycie GetChunk metoda do pobierania danych jeden blok czas i AppendChunk metoda zapisanie jeden blok danych czas.
OLE DB
OLE DB używa ISequentialStream Interfejs obsługintext, text, a image typy danych. The ISequentialStream::Read metoda reads the long data one blok at a czas, and ISequentialStream::Write writes the long data to the database one blok at a czas.Aby uzyskać więcej informacji, zobacz BLOBs i obiektów OLE
ODBC
ODBC ma funkcję o nazwie "danych w — wykonanie" postępowania z typami danych ODBC, w przypadku długich danych: SQL_WLONGVARCHAR (ntext), SQL_LONGVARCHAR ()text) i (SQL_LONGVARBINARYimage). Te typy danych są powiązane ze zmienną programu.SQLGetData jest następnie wywoływana do pobierania danych long jeden blok czas i SQLPutData nazywa się wysłać jeden blok danych long a czas.Aby uzyskać więcej informacji zobaczZarządzanie kolumny obrazu i tekstu.
Biblioteki DB
Biblioteki DB aplikacji również powiązać. ntext, text, a 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, and dbmoretext są używane do zapisywania danych long jednego blok naraz.
Uwaga
Uzyskiwanie dostępu do w wiersz tekstu z biblioteki DB nie jest obsługiwana.
Aby uzyskać więcej informacji zobacz Text and Image Functions (Transact-SQL).