2010-11-22 7 views

Répondre

6

vous pouvez y arriver en utilisant 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

Merci beaucoup .. tout ce que je avais besoin – Martin

0

dynamique La seule façon de le faire comme vous dites purement est d'utiliser SQL dynamique, mais une instruction CASE fonctionne souvent tout aussi bien :

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

si 'f.Whatever' est un int votre requête échouera avec le erreur suivante. 'La conversion a échoué lors de la conversion de la valeur varchar '' en type de données int.' Si vous exécutez SQL Server 2008 vous obtiendrez cette erreur' Une expression constante a été trouvée dans la liste ORDER BY, position 1. –

+0

C'est vrai, mais l'affiche n'a pas précisé quoi que ce soit à propos de sa requête. Dans ma requête, f.Whatever est une chaîne de caractères. :) –

+1

. Compris ... Je voulais juste souligner que si vous choisissez une colonne de façon dynamique, alors pour éviter les erreurs ennuyeuses comme ci-dessus; Le SQL dynamique est probablement plus sûr et plus fiable. –