Udostępnij za pośrednictwem


Rozwiązywanie problemów z błędami rozmiar wiersza

Aparat baz danych programu SQL Server Czasami wykonuje operacje sortowania przed ocenia wyrażenia.Dlatego niektóre kwerendy, wykonać w SQL Server 2000 może zwrócić błąd w SQL Server 2008.Zazwyczaj te kwerendy określić następujące:

  • Bardzo długi char, nchar, varchar, i nvarchar pól w ich zestawy wyników.

  • klauzula, która może spowodować Aparat baz danych uruchomić operację sortowania, takich jak ORDER BY, Grupuj według i klauzule ODRĘBNE; a także klauzul sprzężenia, SQL Server optymalizator kwerendy wybiera się rozwiązać za pomocą Merge Join algorytm, który wymaga sortowanie.

Aparat baz danych Może wykonać operację sortowania przed obliczeniem wszelkimi wyrażeniami, które pojawiają się wcześniej w kwerendzie.Aby to zrobić, Aparat baz danych należy utworzyć worktable do przechowywania wyniki pośrednich.Jeśli to worktable wymaga tworzenia żadnych wierszy, które przekraczają limit 8,060 bajtów, kwerenda zwraca błąd.

Na przykład rozważmy następujący zestaw tabel:

USE tempdb;
GO
CREATE TABLE t1
    (ch char(6000), vch1 varchar(100), vch2 varchar(100), vch3 varchar(100));
CREATE TABLE t2(i int);
GO
INSERT t1 VALUES(REPLICATE('abc', 2000), 
    '123456789012345678901234567890', '123456789012345678901234567890',
    '123456789012345678901234567890');
INSERT t2 VALUES(7);
INSERT t2 VALUES(13);
GO

Należy rozważyć następujące kwerendy.Wykonuje kwerendy w SQL Server 2000 , ale zwraca błąd w SQL Server 2008:

SELECT ch+ch, vch1, vch2, vch3 
FROM t1, t2 
ORDER BY vch1, i;
GO

Kwerenda nie powiedzie się w SQL Server 2008 ponieważ Aparat baz danych ocenia ORDER BY wcześniej niż ocenia klauzula w klauzula SQL Server 2000, i ponieważ bardzo długich żądania kwerendy char pole w jego zestaw wyników.Worktable Aparat baz danych kompilacje określa jeden lub więcej wierszy, które przekraczają limit z 8,060 bajtów.

Aby pomyślnie uruchomić kwerendę, przekonwertować wszystkie długie pola na liście Wybierz, aby varchar(max) lub nvarchar(max) typu danych przy użyciu RZUTOWANIA lub konwersji.Na przykład, poniższa kwerenda wykonywana pomyślnie w SQL Server 2005:

SELECT CONVERT(varchar(max),ch+ch), vch1, vch2, vch3 
FROM t1, t2 
ORDER BY vch1, i;
GO

Zobacz także

Odwołanie

Inne zasoby