Aracılığıyla paylaş


Satır boyutu hatalarında sorun giderme

The SQL Server Veritabanı Altyapısı sometimes performs sort operations before it evaluates expressions.Bu nedenle de yürütmek bazı sorgular SQL Server 2000 bir hata döndürebilir SQL Server 2008.Bu sorgular genelde aşağıdakileri belirtin:

  • Çok uzun char, nchar, varchar, ve nvarchar alanlarında, sonuç kümeleri.

  • Neden olabilecek herhangi yan tümce tümce tümce Veritabanı Altyapısı order by, group by ve DISTINCT cümlelerinden; gibi bir sıralama işlemini başlatmak için ve ayrıca JOIN yan tümceleri, SQL Server sorgu iyileştiricisi kullanarak çözmek seçer bir Merge Join gerektiren sıralama algoritmasını.

The Veritabanı Altyapısı may perform the sort operation before evaluating any expressions that appear earlier in the query.Bunu yapmak için Veritabanı Altyapısı depolamak için bir worktable oluşturmanız gerekir. Ara sonuçlar Bu worktable sınırına 8,060 bayt aşan satırları oluşturmak gerekir, sorgu hata verir.

Örneğin, aşağıdakileri dikkate alın küme Tablo:

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

Aşağıdaki sorgu göz önünde bulundurun.İçinde bu sorguyu yürütür SQL Server 2000 ama bir hata döndürür SQL Server 2008:

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

Sorgu başarısız SQL Server 2008 çünkü Veritabanı Altyapısı değerlendiren ORDER BY önceki yan tümce tümce tümcesinde değerlendiren yan tümce tümce SQL Server 2000, ve sorgu isteği çok uzun olduğundan char alan , sonuç küme.Worktable Veritabanı Altyapısı yapılar sınırı aşan bir veya daha fazla satır belirtir8,060 bayt.,

Sorgu başarıyla çalışması için herhangi bir uzun alan seç listesinden dönüştürmek varchar(max) veya nvarchar(max) veri türlerini kullanarak cast veya convert.Örneğin, aşağıdaki sorgu de başarıyla yürüten SQL Server 2005:

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

Ayrıca bkz.

Başvuru

Diğer Kaynaklar