2010-11-22 17 views
1

Girdi parametresini @OrderBy içermesi gereken bir saklı yordamı değiştirmeye çalışıyorum.SQL Server: dinamik SİPARİŞ BY ve giriş parametresi NULL ise SİPARİŞ BY?

Ama onun BOŞ sonra sonra bu mümkün mü @OrderBy

tarihinde tarafından sipariş etmek istiyorum onun DEĞİL boş ise SELECT SQL ORDER BY

dahil etmezseniz söylemek test etmem gerekiyor? Eğer tamamen dinamik SQL kullanmaktır söylüyorlar ama bir CASE deyimi genellikle de sadece çalışır gibi önceden

Teşekkür

+0

Ayrıca bakınız: stackoverflow.com/questions/149380 –

cevap

6

bu kullanarak dinamik SQL

Declare @dynamicSQL nvarchar(5000); 
Declare @orderBy nvarchar(50); 

Set @orderBy = 'column1'; 

Set @dynamicSQL = 'Select * from Table '; 

If (@orderBy IS NOT NULL) BEGIN 
    @dynamicSQL = @dynamicSQL + 'Order BY ' + @orderBy; 
END 

exec @dynamicSQL; 
+0

Teşekkür sürü .. sadece ne i – Martin

0

bunu yapmanın tek yolu yapabileceğiniz :

SELECT * 
FROM foo f 
ORDER BY CASE WHEN @OrderBy IS NULL THEN f.Whatever ELSE '' END 
+1

gerekli 'f.Whatever' sorgu ile başarısız olacak bir int ise aşağıdaki hata. 'Dönüştürme, varchar değerini '' veri türü int'ye dönüştürürken başarısız oldu. 'Çalışan SQL Server 2008'inizde bu hatayı alacaksınız' SİPARİŞ BY listesinde, konum 1'de sabit bir ifadeyle karşılaşıldı. ' –

+0

Bu doğru, ancak poster Sorgusuyla ilgili bir şey belirtmedi. Sorgumda, f.Bir karakter dizesi nedir? :) –

+1

.Understood ... Sadece sipariş vermek için bir sütun seçtiyseniz, yukarıdaki gibi can sıkıcı hatalardan uzak tutmak için işaret etmek istedim; Dinamik SQL muhtemelen daha güvenli ve daha güvenilirdir. –