Question

J'avais l'habitude de travailler dans un endroit où la pratique commune était d'utiliser la programmation en binôme. Je me souviens du nombre de petites choses que nous pourrions apprendre les unes des autres lorsque nous travaillons ensemble sur le code. Trouver de nouveaux raccourcis, extraits de code, etc. avec le temps a considérablement amélioré notre efficacité en matière d’écriture de code.

Depuis que j'ai commencé à travailler avec SQL Server, je suis resté seul. Les meilleures habitudes que je choisirais normalement en travaillant avec d’autres personnes, ce que je ne peux pas faire maintenant.

Alors voici la question:

  • Quels sont vos conseils efficaces? écrire du code TSQL avec SQL Server Studio de gestion?
  • S'il vous plaît garder le conseils pour 2 & # 8211; 3 choses / raccourcis qui vous pensez améliorer votre vitesse de codage
  • Veuillez rester dans le champ d'application de gestion de TSQL et SQL Server Studio 2005/2008 Si la fonctionnalité est spécifique à la version de Management Studio, veuillez indiquer: par exemple. & # 8220; Fonctionne avec SQL Server 2008 uniquement "

EDIT:

Je crains d’avoir mal compris certains d’entre vous. Je ne cherche pas de conseils pour écrire du code TSQL efficace, mais plutôt des conseils sur la manière d'utiliser efficacement Management Studio pour accélérer le processus de codage lui-même.

Les types de réponses que je recherche sont les suivants:

  • utilisation de modèles,
  • raccourcis clavier,
  • utilisation des plugins IntelliSense, etc.

En gros, ces petites choses qui rendent l'expérience de codage un peu plus efficace et agréable.

Était-ce utile?

La solution 2

wiki appartenant à la communauté Answer - n'hésitez pas à modifier ou à ajouter des commentaires:

Raccourcis clavier

  • F5 , CTRL + E ou ALT + X - exécuter actuellement code TSQL sélectionné
  • CTRL + R - afficher / masquer le volet de résultats
  • CTRL + N - Ouvre une nouvelle fenêtre de requête
  • CTRL + L - Afficher le plan d'exécution de la requête

Modification des raccourcis

  • CTRL + K + C et CTRL + K + U - commentaire / annulation de commentaire du bloc de code sélectionné (suggéré par Unsliced)
  • CTRL + SHIFT + U et CTRL + SHIFT + L - modifie le texte sélectionné en majuscules / minuscules
  • SHIFT + ALT + Sélection de texte - sélectionner / couper / copier / coller un bloc de texte rectangulaire

Modules complémentaires

Autres conseils

  • Utilisation du style de préfixe virgule (suggéré par Cade Roux)
  • Utilisation des raccourcis clavier (suggéré par kcrumley)

Liens utiles

Autres conseils

Jetez un coup d'œil à Invite SQL de Red Gate - c'est une excellente produit (comme la plupart des contributions de Red Gate)

SQL Inform est également un excellent outil gratuit (en ligne) permettant de formater des procédures longues qui peuvent parfois être gênantes. main.

En dehors de cela, j'ai appris d'une expérience douloureuse que c'est une bonne chose de faire précéder toute instruction SUPPRIMER avec un DEBUT TRANSACTION . Une fois que vous êtes sûr que votre déclaration ne supprime que ce qu’elle devrait, vous pouvez alors COMMIT .

m'a sauvé à plusieurs reprises; -)

+1 pour l'invite SQL.

Quelque chose de vraiment simple que je suppose je n'ai jamais vu - qui fonctionnera avec à peu près tout environnement SQL (et même d'autres langages):

Après 12 ans de codage SQL, je suis récemment devenu un converti au style préfixe virgule après l'avoir vu dans du code généré par SSMS. Je l'ai trouvé très efficace. J'ai été très surpris de n'avoir jamais vu ce style auparavant, d'autant plus qu'il a énormément accru ma productivité.

SELECT
t.a
,t.b
,t.c
,t.d
FROM t

Il est très facile d'éditer des listes de sélection, des listes de paramètres, des listes par ordre, des listes par groupe, etc. Je constate que je passe beaucoup moins de temps à tromper l'ajout et la suppression de virgules à la fin des listes après les opérations couper-coller, je suppose que cela s’avère plus simple, car vous ajoutez presque toujours des éléments à la fin, et avec les virgules postfixes, vous devez déplacer davantage le curseur.

Essayez, vous serez surpris - je sais que je l’étais.

Mon astuce préférée préférée est que lorsque vous développez un nom de table dans l'explorateur d'objets, le simple fait de faire glisser le mot colums vers l'écran de requête place une liste de toutes les colonnes de la table dans la requête. Il est beaucoup plus facile de supprimer ceux que vous ne voulez pas que de taper ceux que vous voulez et cela est si facile que cela empêche les gens d'utiliser la syntaxe vraiment horrible de select *. Et cela empêche les fautes de frappe. Bien sûr, vous pouvez également faire glisser individuellement des colonnes.

Mettre en surbrillance une entité dans une requête et appuyer sur ALT + F1 exécutera sp_help pour elle, en vous donnant une ventilation des colonnes, index, paramètres, etc.

Essayez d'utiliser toujours le type de données le plus petit possible et d'indexer tous les champs les plus utilisés dans les requêtes.

Essayez d’éviter autant que possible les curseurs côté serveur. Toujours s'en tenir à une "approche basée sur les ensembles" au lieu d'une "approche procédurale" pour accéder aux données et les manipuler. Les curseurs peuvent souvent être évités en utilisant plutôt les instructions SELECT.

Utilisez toujours le plan d'exécution graphique dans les commandes de l'Analyseur de requêtes ou des commandes SHOWPLAN_TEXT ou SHOWPLAN_ALL pour analyser vos requêtes. Assurez-vous que vos requêtes font une "Recherche d'index". au lieu d'un " Index scan " ou un "Scanner de table". Une analyse de table ou une analyse d'index est une très mauvaise chose et doit être évitée autant que possible. Choisissez les bons index sur les bonnes colonnes. Utilisez les clauses de jointure ANSI-Standard plus lisibles au lieu des jointures de style ancien. Avec les jointures ANSI, la clause WHERE est utilisée uniquement pour filtrer les données. Comme avec les jointures de style plus anciennes, la clause WHERE gère à la fois la condition de jointure et les données de filtrage.

Ne laissez pas vos applications frontales interroger / manipuler les données directement à l'aide d'instructions SELECT ou INSERT / UPDATE / DELETE. Créez plutôt des procédures stockées et laissez vos applications accéder à ces procédures stockées. Cela permet de maintenir l'accès aux données propre et cohérent dans tous les modules de votre application, tout en centralisant la logique métier dans la base de données.

À propos des procédures stockées, ne préfixez pas les noms de vos procédures stockées avec "sp_". Le préfixe sp_ est réservé aux procédures stockées système fournies avec SQL Server. Chaque fois que SQL Server rencontre un nom de procédure commençant par sp_, il essaie d'abord de localiser la procédure dans la base de données master, puis recherche tous les qualificateurs fournis (base de données, propriétaire), puis essaie dbo en tant que propriétaire. Ainsi, vous pouvez réellement gagner du temps dans la localisation de la procédure stockée en évitant "Sp_". préfixe.

Évitez autant que possible les instructions SQL dynamiques. Le SQL dynamique a tendance à être plus lent que le SQL statique, car SQL Server doit générer un plan d'exécution à chaque exécution.

Lorsque cela est possible, essayez d'utiliser l'authentification intégrée. Cela signifie, oubliez les utilisateurs SQL de sa et autres, utilisez l’infrastructure de mise à disposition d’utilisateur de Microsoft et maintenez toujours votre serveur SQL à jour avec tous les correctifs requis. Microsoft fait du bon travail en développant, testant et publiant les correctifs, mais il vous incombe de l'appliquer.

Recherchez sur amazon.com des livres avec de bonnes critiques à ce sujet et achetez-les!

CTRL + I pour recherche incrémentielle . Appuyez sur F3 ou CTRL + I pour parcourir les résultats.

Si vous faites glisser le noeud Colonnes de l'explorateur d'objets pour une table, une liste de colonnes CSV est insérée dans la fenêtre de requête pour vous

Accélérateurs de clavier. Une fois que vous avez déterminé le type de requêtes que vous écrivez beaucoup, écrivez des procédures stockées utilitaires pour automatiser les tâches et associez-les à des raccourcis clavier. Par exemple, cet article explique comment éviter de taper" sélectionner les 10 meilleures * de SomeBigTable ". chaque fois que vous voulez simplement jeter un coup d’œil sur des exemples de données de cette table. J'ai une version très étendue de cette procédure, mappée sur CTRL + 5 .
Un peu plus j'ai:

  1. CTRL + 0 : Scriptez rapidement les données d'une table, ou d'une définition de proc, UDF ou de vue
  2. CTRL + 9 : recherchez tout objet dont le nom contient une chaîne donnée (pour les cas où vous vous connaissez, il existe une procédure avec "Option", mais vous je ne sais pas par quoi son nom commence)
  3. CTRL + 7 : recherche d'un proc, d'un fichier UDF ou d'une vue contenant une chaîne donnée dans son code
  4. CTRL + 4 : recherche toutes les tables ayant une colonne portant le nom donné

... et quelques autres qui ne me viennent pas à l'esprit pour le moment. Certaines de ces choses peuvent être effectuées via des interfaces existantes dans SSMS, mais les fenêtres et les widgets de SSMS peuvent être un peu lents à charger, en particulier lorsque vous interrogez un serveur sur Internet, et je préfère ne pas avoir à me lâcher la main le clavier quand même.

Un petit choix - les sélections rectangulaires ALT + DRAG sont vraiment pratiques pour copier / coller des listes de colonnes alignées verticalement (par exemple, lors de l'écriture manuelle d'un fichier UPDATE massif). L’écriture de TSQL est à peu près la seule fois où je l’utilise!

Pour les sous-requêtes

Explorateur d'objets > cliquez avec le bouton droit sur une table > Table de script sous > SÉLECTIONNER pour > Presse-papiers

Ensuite, vous pouvez simplement coller la section où vous le souhaitez en tant que sous-requête.

Modèles / extraits

Créez vos propres modèles avec uniquement un extrait de code. Ensuite, ouvrez le modèle en tant que nouveau document, faites-le simplement glisser sur votre requête actuelle pour insérer l'extrait de code.

Un extrait de code peut simplement être un ensemble d’en-tête avec des commentaires ou tout simplement un simple morceau de code.

Transactions implicites

Si vous ne vous souvenez pas de démarrer une transaction avant votre suppression, vous pouvez accéder aux options et définir des transactions implicites par défaut pour toutes vos requêtes. Ils nécessitent toujours un commit / rollback explicite.

Niveau d'isolement

Accédez aux options et définissez le niveau d'isolement sur READ_UNCOMMITED par défaut. De cette façon, vous n’avez pas besoin de taper un NOLOCK dans toutes vos requêtes ad hoc. N'oubliez pas de placer l'indicateur de table lors de l'écriture d'une nouvelle vue ou d'une procédure stockée.

Base de données par défaut

Votre identifiant dispose d'une base de données par défaut définie par l'administrateur de base de données (Pour moi, c'est généralement celle qui n'est pas souhaitée presque à chaque fois).

Si vous voulez que ce soit différent en raison du projet sur lequel vous travaillez actuellement.

Dans 'Volet Serveurs enregistrés' > Clic droit > Propriétés > Onglet Propriétés de la connexion > se connecter à la base de données.

Plusieurs connexions

(vous les avez peut-être déjà fait)

Enregistrez le serveur plusieurs fois, chacun avec un identifiant différent. Vous pouvez ensuite ouvrir plusieurs fois le même serveur dans l'explorateur d'objets (chacun avec un identifiant différent).

Pour exécuter la même requête que vous avez déjà écrite avec un identifiant différent, au lieu de la copier, faites un clic droit sur le volet de la requête > Connexion > Changer de connexion.

Une autre chose qui contribue à améliorer la précision de ce que je fais n'est pas vraiment un conseil pour les studios de gestion, mais bien l'utilisation de t-sql lui-même.

Chaque fois que j'écris une instruction de mise à jour ou de suppression pour la première fois, j'y incorpore une sélection afin que je puisse voir quels enregistrements seront affectés.

Exemples:

select t1.field1,t2.field2
--update t
--set field1 = t2.field2 
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

select t1.* 
--delete t1
from mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 = 'test'

(note que j'ai utilisé, sélectionnez * ici uniquement à titre d'illustration. Normalement, je ne sélectionnerais que les quelques champs dont j'ai besoin pour voir que la requête est correcte. Parfois, il se peut que j'ai besoin de voir les champs des autres tables de la jointure ainsi que les enregistrements. J'ai l'intention de supprimer pour m'assurer que la jointure a fonctionné comme je le pensais.

Lorsque vous exécutez ce code, vous exécutez d'abord la sélection pour vous assurer qu'il est correct, puis commentez la ou les lignes sélectionnées et supprimez la mise en commentaire de la suppression ou de la mise à jour des pièces. En procédant ainsi, vous ne lancez pas la suppression ou la mise à jour par inadvertance avant de l'avoir vérifiée. De plus, vous évitez le problème d'omettre de commenter la sélection, ce qui entraîne la mise à jour de tous les enregistrements de la table de base de données pouvant se produire si vous utilisez cette syntaxe et décommentez la sélection pour l'exécuter:

select t1.field1,t2.field2
update t
set field1 = t2.field2 
--select t1.field1,t2.field2
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

Comme vous pouvez le voir dans l'exemple ci-dessus, si vous supprimez la mise en commentaire de la sélection et oubliez de la commenter à nouveau, oops vous venez de mettre à jour la table entière, puis d'exécuter une sélection lorsque vous pensiez exécuter la mise à jour. Quelqu'un vient de faire cela dans mon bureau cette semaine, ce qui a permis à une seule personne parmi tous les clients de se connecter aux sites Web des clients. Alors évitez de faire ça.

Utilisez le bouton Filtre de l'explorateur d'objets pour rechercher rapidement un objet particulier (tableau, procédure stockée, etc.) dans un texte partiel du nom ou rechercher des objets appartenant à un schéma particulier.

J'ai une tâche planifiée qui chaque nuit écrit chaque objet (table, sproc, etc.) dans un fichier. L’indexation de la recherche en texte intégral est définie dans le répertoire de sortie. Ainsi, lorsque je recherche une certaine chaîne (par exemple une constante) qui est enterrée quelque part dans la base de données, je la trouve très rapidement.

Dans Management Studio, vous pouvez utiliser les tâches > Générez des scripts ... pour voir comment procéder.

J'aime configurer le raccourci clavier de CTRL + F1 en tant que sp_helptext , car cela vous permet de mettre en évidence une procédure stockée et de regarder rapidement à son code. Je trouve que c’est un bon complément au raccourci par défaut ALT + F1 sp_help .

Je vous suggère de créer des normes pour vos scripts SQL et de vous y tenir. Utilisez également des modèles pour créer rapidement différents types de procédures et de fonctions stockées. Voici une question sur les modèles dans SQL Server 2005 Management Studio

Comment créer des modèles de procédures stockées SQL Server 2005 dans SQL Server 2005 Management Studio?

Je suis développeur du complément SSMSBoost, récemment publié pour SSMS2008 / R2. L'intention était d'ajouter des fonctionnalités permettant d'accélérer les tâches quotidiennes:

Coupes de porc: F2 - (dans l'éditeur SQL): objet de script situé avec un curseur non perdu

CTRL + F2 - (dans l'éditeur SQL): recherchez un objet situé sous le curseur dans l'explorateur d'objets et mettez-le au point. + Il comprend l'éditeur de raccourci, qui manque dans SSMS2008 (arrive dans SSMS2012)

SSMSBoost ajoute également une barre d’outils avec des boutons:

  • Synchronisation de la connexion de l'éditeur SQL avec l'Explorateur d'objets (concentre la base de données actuelle dans l'Explorateur d'objets)
  • Gérez vos propres connexions préférées et passez d’une connexion à l’autre via une liste déroulante (y compris les sauts entre serveurs)
  • Remplacements automatiques: saisie " sel " le remplacera par select * from et vous pourrez également ajouter vos propres paires de remplacement de jeton
  • et quelques fonctionnalités plus utiles

Barre d

Afficher le Concepteur de requêtes avec CTRL + SHIFT + Q

Utilisez la fonctionnalité TRY / CATCH pour détecter les erreurs.

La programmation experte SQL Server 2005 d’Adam Machanic est une excellente ressource pour les techniques et les pratiques éprouvées.

Utilisez le chaînage des propriétés pour les processus stockés.

Utilisez des schémas pour renforcer la sécurité des données et les rôles.

Utilisez les détails de l’explorateur d’objets au lieu d’explorateur d’objets pour afficher vos tableaux. Ainsi, vous pouvez appuyer sur une lettre et la faire aller à la première table avec le préfixe de cette lettre.

Si vous travaillez avec des développeurs, obtenez souvent un fragment de code formaté en une longue ligne de code, puis le complément complémentaire d'imprimante SQL pour la gestion de SQL Server peut grandement aider avec plus de 60 options de formatage. http://www.dpriver.com/sqlpp/ssmsaddin.html

L'utilisation de signets est un excellent moyen de préserver votre intégrité physique si vous travaillez avec ou si vous dépannez une procédure très longue. Supposons que vous travaillez avec un champ dérivé dans une requête externe et que sa définition comporte 200 lignes supplémentaires dans la requête interne. Vous pouvez créer un signet pour les deux sites, puis naviguer rapidement entre eux.

Si vous devez écrire beaucoup de sprocs pour une API quelconque. Vous pouvez aimer ces outils que j'ai écrits lorsque j'étais programmeur. Supposons que vous ayez une table de 200 colonnes pour laquelle un sproc est écrit pour insérer / mettre à jour et un autre pour le supprimer. Parce que vous ne voulez pas que votre application accède directement aux tables. Seule la partie déclaration sera une tâche fastidieuse, mais pas si une partie du code est écrite pour vous. Voici un exemple ...

CREATE PROC upsert_Table1(@col1 int, @col2 varchar(200), @col3 float, etc.)
AS
BEGIN
  UPDATE table1 SET col1 = @col1, col2 = @col2, col3 = @col3, etc.
  IF @@error <> 0
    INSERT Table1 (col1, col2, col3, etc.)
    VALUES(@col1, @col2, @col3, etc.)
END
GO
CREATE PROC delete_Table1(@col1)
AS DELETE FROM Table1 WHERE col1 = @col1

http://snipplr.com / view / 13451 / spcoldefinition-ou-write-upsert-sp-in-a-snap /

Remarque: vous pouvez également accéder au code et à l'article originaux écrits en 2002 (je me sens vieux maintenant!)
http: //www.planet-source-code .com / vb / scripts / ShowCode.asp? txtCodeId = 549 & amp; lngWId = 5

L'utilisation de TAB sur le texte mis en surbrillance l'indente. Bien pour organiser facilement votre code dans un format lisible. De même, SHIFT + TAB annulera l'indentation.

F5 pour exécuter la requête en cours est une victoire facile, après cela, les commandes génériques de l'éditeur MS de CTRL + K + C to commentez le texte sélectionné, puis CTRL + K + U pour commenter.

  • ALT + SHIFT + Sélection

C’est un excellent projet que j’ai découvert récemment: il vous permet de sélectionner une section rectangulaire de texte sans tenir compte des sauts de ligne. Très pratique pour couper rapidement une sous-requête ou une liste.

Devart 'SQL Complete Express Edition est un addon SSMS, gratuit et utile. Il fournit un formatage de code indispensable et des fonctionnalités intellisense.

J'utilise également le complément SSMSToolsPack et il est très bon. J'aime;

  1. Il s’agit des extraits de code SQL dans lesquels vous pouvez créer des clés courtes pour les extraits de code et les ajouter automatiquement lorsque vous tapez ces clés et appuyez sur Entrée.
  2. Faites une recherche dans l'historique pour récupérer les requêtes que vous avez exécutées il y a des mois et que vous avez oubliées et qui m'ont fait gagner beaucoup de temps.
  3. Restaurez la dernière session. Maintenant, je ne sauvegarde jamais mes requêtes si je dois juste redémarrer mes fenêtres. Je viens de cliquer sur restaurer la dernière session et ma dernière session est restaurée et la connexion est créée automatiquement.
  4. Créez des instructions d'insertion à partir des résultats de la requête (très utile). J'adore cet addon.

Une petite prise récemment introduite. SSMSToolsPack n'est plus gratuit pour SSMS 2012. Il est toujours gratuit pour SSMS 2005 et SSMS 2008, jusqu'à présent . Utilisez-le uniquement si vous souhaitez l'acheter lors de la migration vers SSMS 2012. Sinon, c'est peut-être une bonne idée de vous en détourner.

Je recommande vivement l'invite SQL de Red Gate. La découverte automatique (intellisense sur les tables, les procédures stockées, les fonctions et les fonctions natives) n’est rien d’énorme! :)

Cependant, cela a un prix. Il n’existe pas de version gratuite de la chose.

Connaître les deux (?) différents types de fenêtres disponibles dans SQL Server Management Studio.

Si vous cliquez avec le bouton droit sur une table et sélectionnez Ouvrir , il utilisera une grille modifiable dans laquelle vous pourrez modifier les cellules. Si vous cliquez avec le bouton droit de la souris sur la base de données et sélectionnez Nouvelle requête cela créera un type de fenêtre légèrement différent dans lequel vous ne pourrez pas modifier la grille, mais cela vous donnera quelques fonctionnalités intéressantes, telles que permettre des extraits de code différents et vous permettre de les exécuter séparément par sélection.

Utilisez une requête SELECT INTO pour créer facilement et rapidement des tables de sauvegarde.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top