SORUN: Yürütme planı ve sonuçları toplu bitiştirme sorgular, Expression konum bağlıdır

Makale çevirileri Makale çevirileri
Makale numarası: 287515 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

ORDER BY yan tümcesi toplama birleştirme sorguları için herhangi bir işleç veya ifadeler uyguladığınızda, beklenmedik sonuçlarla karşılaşabilirsiniz. Microsoft SQL Server'da toplama birleştirme sorgularının sonuçları olup olmadığına Transact-SQL deyimleri sütun sorgunun ORDER BY yan tümcesi uygulanır üzerine bağlıdır. Daha fazla bilgi için veya bir toplama birleştirme sorgusu ve yaşandığı davranış örneği görmek için bu makalenin "Daha fazla bilgi" bölümüne bakın.

Neden

Toplam art arda ekleme sorgusu için doğru davranışı tanımlı değil.

Bir sorguyu SHOWPLAN çıkışını incelenmesi, aynı bu deyimler uygulandığında sorgunun SELECT listesindeki sütunlar için deyimler sorgunun ORDER BY yan tümcesinde, sütun için daha uygulandığında, bu SQL Server query processor farklı bir yürütme planı oluşturur gösterir. Sorgu işlemcisi tarafından yapılan karar olası yürütme planları maliyeti temel alır.

ANSI SQL-92) belirtimi, herhangi bir sütunu ORDER BY yan tümcesi tarafından başvurulan sütunların SELECT listesinde varsa, tanımlanan sonuç kümesi eşleşmesini gerektirir. Ifade bir ORDER BY yan tümcesi üyesi uygulandığında, bu sonuç sütunu SELECT listesinde tanımlanmamış davranışını maruz kalmaz.

Ayrıca, ORDER BY yan tümcesi uygulanması nasıl karşılanacağını ilgili ANSI belirtimleri, SEÇIM listesi tarafından üretilen tüm sonuç kümesini almak ve sonra da tablosunun SEÇIM listesi içinde bu sütunlara göre sıralama yapmak gibi ORDER BY etkisini aynı olması gerektiğini belirtin.

Pratik Çözüm

Bir toplama birleştirme sorgudan beklenen sonuçları elde etmek için herhangi bir Transact-SQL işlevi veya deyimi SEÇIM listesi yerine ORDER BY yan tümcesinde sütunlar için geçerlidir.

Daha fazla bilgi

Bir toplama birleştirme sorgusu birden çok satır değerlerini bir satır birleştiren bir sorgudur.

Davranışı yeniden oluşturma adımları

Aşağıdaki Transact-SQL komut dosyası davranışı yeniden oluşturmak için kullanın.

SEÇIM listesi ve ORDER BY yan tümcesi [C1]</a1> sütununda ltrım DEYIMINI ve RTRIM işlevleri uygulamaya dikkat edin.
IF EXISTS( SELECT * FROM sysobjects WHERE name = 'T1' )
	DROP TABLE T1
GO

CREATE TABLE T1(  C1  NCHAR(1)  )

SET NOCOUNT ON

INSERT T1 VALUES( 'A' )
INSERT T1 VALUES( 'B' )

DECLARE @Str0 VARCHAR(4) 
DECLARE @Str1 VARCHAR(4) 
DECLARE @Str2 VARCHAR(4) 

SET @Str0 = ''
SET @Str1 = ''
SET @Str2 = ''

SELECT @Str0 = @Str0 + C1 FROM T1 ORDER BY C1
SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1

SELECT @Str0 'No functions applied to column.'
SELECT @Str1 'LTRIM() and RTRIM() applied to ORDER BY clause.'
SELECT @Str2 'SELECT list with LTRIM(RTRIM()) (Workaround)'

IF @Str1 <> @Str2
BEGIN
   PRINT ''
   PRINT 'Execution plan depends on where the functions are applied:'
   PRINT '=========================================================='
   PRINT ''

   SET @Str1 = ''
   SET @Str2 = ''

   SET STATISTICS PROFILE ON
   SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
   SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1
   SET STATISTICS PROFILE OFF
END

SET NOCOUNT OFF

DROP TABLE T1
				

Özellikler

Makale numarası: 287515 - Last Review: 16 Ekim 2003 Perşembe - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Anahtar Kelimeler: 
kbmt kbcodesnippet kbprb KB287515 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:287515

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com