Trier par desc comme option par défaut pour SQL Server Management Studio?

Est-il possible de faire en sorte que SQL Server Management Studio renvoie les lignes par défaut? Chaque fois que j'ouvre une table via le menu (par exemple en sélectionnant returnner toutes les lignes), j'obtiens les lignes les plus anciennes en haut. Je sais que je peux append 'ordre par desc' dans la déclaration SQL, mais en tapant cela devient ennuyeux 🙂

    Vous ne pouvez pas modifier le model existant pour générer des SELECT à partir du menu contextuel dans SSMS.

    Heureusement, SSMS est extensible. Cela signifie que vous pouvez écrire vos propres extensions qui peuvent faire exactement ce que vous voulez, ou vous pouvez utiliser une solution existante. Je reorderais le Pack d'outils SSMS de Mladen:

    http://www.ssmstoolspack.com/

    Il était gratuit jusqu'à récemment, et est toujours pour les versions 2008r2 et antérieures.

    Il n'y a pas d'ordre de sorting par défaut dans SQL

    Si vous voyez "le plus ancien" en haut alors cela peut être le moyen le plus rapide pour le moteur de le récupérer parce que c'est ainsi qu'il est stocké sur le disque.

    Vous n'êtes pas garanti de l'avoir dans cet ordre, considérez-le "non ordonné" sauf si vous spécifiez une command!

    ORDER BY est le seul moyen d'avoir des résultats dans une command spécifique.

    La command peut être une opération coûteuse en fonction de la table et de l'ordre spécifiés, de sorte que la command non ordonnée est la norme.

    Ce que JNK dit est 100% correct.

    Mais si vous voulez juste que cela fonctionne normalement , et seulement lorsque vous ouvrez une table plutôt que lorsque vous interrogez une table …

    Essayez d'append un index clusterisé, le premier champ indexé étant indexé dans l'ordre décroissant. Cela causera probablement ce dont vous avez besoin.

    (Si vous avez déjà un index clusterisé sur ce champ, modifiez ses propriétés et modifiez son ordre.)

    C'est seulement une idée raisonnable si un tel index est amical à l'utilisation réelle de la table. Ce serait vaincre d'avoir un index inutile par programme, juste pour votre commodité;)

    En regardant la sortie du profileur, il semble que la requête est générée à la volée, donc je ne mettrais pas mes espoirs sur un model que vous pouvez changer quelque part

     /****** Script for SelectTopNRows command from SSMS ******/ SELECT TOP 1000 [field1] ,[field2] ,[field3] ,[last_modified] FROM [test_database].[dbo].[t_test] 

    Comme alternative, vous pouvez créer une petite procédure stockée qui prend le nom d'une table puis returnne datatables de cette table. En supposant que vous ayez une logique (récurrente) dans vos tables qui indiquerait l'âge des loggings, il ne devrait pas être trop difficile de find un ordre par défaut pour cette table. Si vous liez ensuite cette procédure stockée à une touche de raccourci, vous pouvez facilement get les n premiers loggings de cette table dans l'ordre souhaité. Je sais que ce n'est pas tout à fait la même chose que l'information dans l'Explorateur d'objects mais personnellement je n'utilise jamais l'Explorateur d'objects et apprécie plutôt le contenu d'une table en sélectionnant simplement le text dans une window de requête et en appuyant sur CTRL-3.

    Pour commencer, ça ressemblerait à ça

     IF OBJECT_ID('p_select_top_100_desc') IS NOT NULL DROP PROCEDURE p_select_top_100_desc GO CREATE PROCEDURE p_select_top_100_desc ( @table_name sysname) AS DECLARE @object_id int DECLARE @order_by_col nvarchar(max) DECLARE @sql nvarchar(max) SELECT @object_id = Object_id(@table_name), @order_by_col = '' IF @object_id IS NULL BEGIN RaisError('Could not find table %s ?!', 16, 1, @table_name) Return(-1) END -- find order by column SELECT TOP 1 @order_by_col = c.name FROM sys.columns c WHERE c.object_id = @object_id AND lower(c.name) in ('modified', 'last_modified', 'change_date', 'crdate', 'etc') -- if none found, use the identity column SELECT @order_by_col = c.name + ' DESC' FROM sys.columns c WHERE c.object_id = @object_id AND c.is_identity = 1 AND @order_by_col = '' -- if still none found, use the PK (reverse order) SELECT @order_by_col = @order_by_col + (CASE WHEN ic.index_column_id = 1 THEN '' ELSE ',' END) + c.name + (CASE WHEN ic.is_descending_key = 0 THEN ' DESC' ELSE ' ASC' END) FROM sys.indexes i JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id WHERE i.object_id = @object_id AND i.is_primary_key = 1 AND @order_by_col = '' ORDER BY ic.index_column_id -- actual query SELECT @sql = 'SELECT TOP 100 * FROM ' + @table_name + (CASE WHEN @order_by_col = '' THEN '' ELSE ' ORDER BY ' + @order_by_col END) PRINT @sql EXEC (@sql) Return 0 GO EXEC p_select_top_100_desc 't_test' 

    Pour le 'lier' à un raccourci keyboard, vous devez aller dans le menu Tools \ Customize , click le button [Keyboard...] . Développez la twig Keyboard dans l'arborescence et accédez à la feuille Query Shortcuts de la Query Shortcuts . Vous obtenez alors une grid ennuyeuse qui vous permet de lier une procédure stockée à une combinaison CTRL-nbr . Veillez à ce que certaines d'entre elles soient corrigées + après l'avoir configuré et appuyez sur OK. Le paramètre ne fonctionnera que pour les windows de requête que vous venez d'ouvrir, celles qui existent fonctionneront avec l'ancienne configuration.

    J'espère que ça aide un peu…

    PS: si vous le nommez sp_select_top_n_desc et le comstackz dans la database master, vous devriez pouvoir l'utiliser sur tout le server sans avoir à le déployer dans chaque database. Cependant, vous aurez probablement besoin de passer à dynamic-sql puis en préfixer toutes les requêtes sys.table avec la sortie de DB_Name() car sinon cela apparaîtra probablement dans la table master.sys.columns etc .. ce qui n'est pas ce que vous vouloir =)

    Essayez de créer une vue sur cette table comme ceci et utilisez-la dans votre clause select ou votre requête ad hoc

     CREATE VIEW dbo.yourTable_vw AS SELECT TOP 100 PERCENT * FROM yourTable ORDER BY yourcolumn DESC GO 

    En fait, vous pouvez créer un addin pour ssms qui ajoute un nouvel élément au menu contextuel de l'explorateur d'objects.

    Cochez cette question: Créer un élément de menu personnalisé dans l'Explorateur d'objects

    Une autre façon est de créer un SP qui génère et exécute l'instruction select avec la clause ORDER BY dans la database master (sur tous les servers) et lier un raccourci keyboard à ce sp.

    Extrait de Microsoft SQL Server 2012 Principes de base T-SQL d'Itzik Ben-Gan -> Chapitre 1 -> Context théorique -> Définir la théorie:

    … lorsque vous écrivez des requêtes T-SQL sur des tables dans une database (comme une table d'employés), vous devriez penser à l'set des employés plutôt qu'à chacun des employés. En d'autres termes, une requête sur une table peut renvoyer des lignes de table dans n'importe quel ordre, sauf si vous requestz explicitement que datatables soient sortingées de manière spécifique, peut-être à des fins de présentation.

    SSMS ne prend pas en charge l'instruction SELECT par défaut personnalisée. S'il supporte, quelle colonne doit-il mettre après la clause ORDER BY, Considérant les tables

    1. ne pas avoir une colonne comme 'CreatedDate';
    2. ou dont la key primaire est GUID (l'ordre n'est pas évident)
    3. ou n'ont pas de key primaire ou d'index clusterisé

    Même SQL SERVER sera capable de listr datatables les plus récentes un jour, ce n'est pas une façon naturelle de penser à des lignes individuelles (les plus récentes / les plus anciennes) par rapport aux tables. Essayez d'utiliser l'instruction UPDATE combinée à la clause ORDER BY pour mettre à jour datatables les plus récentes.

    Bien qu'il n'y ait officiellement pas d'ordre de sorting par défaut pour l'input linéaire simple, j'obtiens un ordre de sorting par défaut satisfaisant avec l'ordre de sorting PK ou IX. Disons pour les tables de journaux où je suis le plus intéressé par les dernières inputs.

     CREATE TABLE [dbo].[tableA]([DateTime] [datetime] NOT NULL, CONSTRAINT [PK_tableA] PRIMARY KEY CLUSTERED ([DateTime] DESC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 

    Ou dans SSMS …

    entrez la description de l'image ici

    pour moi – j'utilise d'abord le code EF, mais je le fais chaque fois que je crée une nouvelle table: Table de clic droit, table de script comme -> Drop & Create table, et éditez le SQL et changez la key en DESC. fait (pas de vue ou rien de désordonné)