Si j'écris un sproc dans ce format, sql le fera-t-il efficacement ou le sql 'weaving' sera-t-il fait côté serveur (.net)?Est-ce une requête SQL Server efficace?
Note: ceci est juste une idée approximative de ce que ma requête ressemble, il y a plus « si » les clauses de la construction ma requête que j'exécute en utilisant « exec »
declare @sql nvarchar(4000)
declare @order nvarchar(4000)
set @sql = 'select id, name'
set @sql = @sql + ' ....'
if(@sortOrder)
set @order = 'order by name desc'
exec @sql + @order
Le type des colonnes doit être la même (NULL les ones non utilisés): QUAND ORDER BY @Order CASE 1 ALORS [ DateOfBirth] ELSE NULL END , CASE @Order QUAND 2 ALORS [DateOfBirth] ELSE NULL END DESC , CASE @Order QUAND 3 THEN [LastName] ELSE NULL END , CASE @Order QUAND 4 THEN [LastName] ELSE NULL END DESC – IDisposable
Non, ils ne le font pas. Tant que vous CAST à sql_variant, les colonnes peuvent toutes être de types différents dans le même CAS et vous n'avez pas besoin de définir quoi que ce soit à NULL. Essayez-le, ça fonctionne. Je l'ai fait plusieurs fois. –
Si vous convertissez en sql_variant, la logique de tri sera basée sur une chaîne, de sorte que les valeurs numériques ne seront pas triées comme prévu. – IDisposable