9
votes

Comment trier l'ensemble des résultats d'une instruction de mise à jour utilisant la clause de sortie?

J'aimerais trier les lignes retournées par une déclaration de mise à jour, mais il n'y a pas de mauvaise façon de le faire en fonction du page MSDN pour la clause de sortie , qui dit:

SQL Server ne garantit pas l'ordre dans lequel les lignes sont traitées et renvoyées par des instructions DML à l'aide de la clause de sortie. P> BlockQuote>

Puisque je ne peux pas simplement faire cliquer sur ma requête originale, ma prochaine approche consiste à mettre les résultats dans une variable de table ou de table temporaire, puis sélectionnez et commandez à ce sujet. Je devrais pouvoir trouver une solution à l'aide de tables temporaires, mais je ne pense pas avoir jamais utilisé une variable de table auparavant. Y a-t-il une raison de préférer l'un sur l'autre dans ce contexte? Ou existe-t-il un meilleur moyen d'obtenir des résultats triés d'une clause de sortie (c'est-à-dire avec une variable de table Temp ou de table)? P>

La plate-forme DB est SQL Server 2005. P>

Voici la requête d'origine; Je veux trier sur le champ relainé. P> xxx pré>

La table qu'il s'exécute contre regarde quelque chose comme ceci: p>

CREATE TABLE [dbo].[WFItem](
    [WFItemID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [varchar](255) NULL,
    [Teaser] [varchar](255) NULL,
    [ReleaseDate] [datetime] NULL,
    [ApprovedDate] [datetime] NULL,
    [SentDate] [datetime] NULL,
 CONSTRAINT [PK_WFItem] PRIMARY KEY CLUSTERED 
(
    [WFItemID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
 ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


0 commentaires

3 Réponses :


7
votes

Je suppose que votre seule option serait de tourner la clause code> de sortie de code> en une sortie dans code> et de stocker les valeurs dans une table temporaire (en mémoire) et de les trier , lors de la sélection de la table temporaire.

SELECT WFItemID, Title, Teaser
FROM @UpdateOutputTable
ORDER BY ReleaseDate


0 commentaires

1
votes

Vous pouvez produire des résultats dans la variable de table, puis sélectionner à partir de cette table des résultats dans n'importe quel ordre. Voici un exemple de la même Page MSDN que vous avez mentionné dans votre Q. Mais j'ai ajouté l'ordre en fin de compte xxx


0 commentaires

1
votes

Il n'y a aucun moyen de trier une sortie, au meilleur de ma connaissance. En ce qui concerne quel objet à utiliser, cela dépend vraiment des volumes de données que vous avez affaire. Voici un article comparant les tables temporaires aux variables de tableau:

http://blogs.msdn.com/sqlprogramblabilité/archive/2007/01/18/11-0-Temporary-tables-tables-variables-and-recompiles.aspx

Utilisez simplement la sortie pour déposer vos résultats dans votre objet temporaire, puis les récupérer en utilisant une commande par clause.


0 commentaires