J'avais l'habitude de travailler dans un endroit où une pratique courante était d'utiliser la programmation par paires. Je me souviens du nombre de petites choses que nous pourrions apprendre les unes des autres en travaillant ensemble sur le code. La récupération de nouveaux raccourcis, extraits de code, etc. avec le temps a considérablement amélioré notre efficacité à écrire du code.
Depuis que j'ai commencé à travailler avec SQL Server, je suis resté seul. Les meilleures habitudes que je choisirais normalement de travailler avec d'autres personnes, ce que je ne peux pas faire maintenant.
Voici donc la question:
MODIFIER:
J'ai peur d'avoir pu être mal compris par certains d'entre vous. Je ne cherche pas des conseils pour écrire du code TSQL efficace mais plutôt des conseils sur la façon 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:
Fondamentalement, ces petites choses qui rendent l'expérience de codage un peu plus efficace et agréable.
réponse wiki appartenant à la communauté - n'hésitez pas à modifier ou ajouter des commentaires:
Raccourcis clavier
Modification des raccourcis
Extensions
Autres conseils
Liens utiles
Jetez un oeil à invite SQL de Red Gate - c'est un excellent produit (comme le sont la plupart des contributions de Red Gate)
SQL Inform est également un excellent outil gratuit (en ligne) pour formater de longues procédures qui peuvent parfois devenir incontrôlables.
En dehors de cela, j'ai appris par une expérience douloureuse que c'est une bonne chose de précéder tout DELETE
avec une BEGIN TRANSACTION
. Une fois que vous êtes sûr que votre instruction 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 que je n'avais jamais vu - qui fonctionnera avec à peu près N'IMPORTE QUEL 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 augmenté 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 de classement, des listes de groupe, etc. et les opérations de collage - je suppose que cela fonctionne plus facilement parce que vous ajoutez presque toujours des choses à la fin, et avec des virgules postfixes, cela vous oblige à déplacer davantage le curseur.
Essayez-le, vous serez surpris - je sais que je l'étais.
Mon conseil rapide préféré est que lorsque vous développez un nom de table dans l'Explorateur d'objets, il suffit de faire glisser les colonnes de Word vers l'écran de requête pour mettre une liste de toutes les colonnes du tableau 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 c'est si facile, cela empêche les gens d'utiliser la syntaxe select * vraiment horrible. Et cela empêche les fautes de frappe. Bien sûr, vous pouvez également faire glisser individuellement les colonnes.
Mettre en surbrillance une entité dans une requête et appuyer sur ALT + F1 exécutera sp_help pour cela, vous donnant une ventilation de toutes les colonnes, index, paramètres, etc.
Essayez d'utiliser toujours le plus petit type de données possible et indexez tous les champs les plus utilisés dans les requêtes.
Essayez d'éviter autant que possible les curseurs côté serveur. Respectez toujours une "approche basée sur un ensemble" 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 des instructions SELECT à la place.
Utilisez toujours le plan d'exécution graphique dans l'Analyseur de requêtes ou les commandes SHOWPLAN_TEXT ou SHOWPLAN_ALL pour analyser vos requêtes. Assurez-vous que vos requêtes effectuent une "recherche d'index" au lieu d'une "analyse d'index" ou d'une "analyse 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 dans les bonnes colonnes. Utilisez les clauses de jointure standard ANSI plus lisibles au lieu des anciennes jointures de style. Avec les jointures ANSI, la clause WHERE est utilisée uniquement pour filtrer les données. Comme pour 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 des 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 garder l'accès aux données propre et cohérent sur tous les modules de votre application, tout en centralisant la logique métier au sein de la base de données.
En parlant de procédures stockées, ne préfixez pas vos noms de 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 il recherche tous les qualificatifs (base de données, propriétaire) fournis, puis il essaie dbo en tant que propriétaire. Vous pouvez donc vraiment gagner du temps dans la localisation de la procédure stockée en évitant le préfixe "sp_".
É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 fois lors de l'exécution.
Lorsque cela est possible, essayez d'utiliser l'authentification intégrée. Cela signifie, oubliez sa et les autres utilisateurs SQL, utilisez l'infrastructure de provisionnement des utilisateurs Microsoft et gardez toujours votre serveur SQL à jour avec tous les correctifs requis. Microsoft fait un bon travail de développement, de test et de publication de correctifs, mais c'est votre travail de les appliquer.
Recherchez sur Amazon.com des livres avec de bonnes critiques à ce sujet et achetez-le!
CTRL + I pour recherche incrémentale . Frappé F3 ou CTRL + I pour parcourir les résultats.
Accélérateurs clavier. Une fois que vous avez déterminé les types de requêtes que vous écrivez beaucoup, écrivez des procédures stockées utilitaires pour automatiser les tâches et mappez-les aux raccourcis clavier. Par exemple, cet article explique comment éviter de taper "sélectionnez le top 10 * de SomeBigTable" chaque fois que vous souhaitez simplement obtenir un aperçu rapide des exemples de données de cette table. J'ai une version largement développée de cette procédure, mappée sur CTRL + 5.
J'en ai quelques autres:
... et quelques autres qui ne me viennent pas à l'esprit en ce moment. Certaines de ces choses peuvent être effectuées via les interfaces existantes dans SSMS, mais les fenêtres et 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 à lever la main le clavier de toute façon.
Si vous faites glisser depuis le nœud Colonnes de l'Explorateur d'objets pour une table, il place une liste CSV de colonnes dans la fenêtre de requête pour vous.
Juste un tout petit - sélections rectangulaires ALT + DRAG
sont très pratiques pour copier + coller des listes de colonnes alignées verticalement (par exemple lors de l'écriture manuelle d'une mise à jour massive). L'écriture de TSQL est la seule fois où je l'utilise!
explorateur d'objets> cliquez avec le bouton droit sur une table> Table de scripts comme> SELECT to> Clipboard
Ensuite, vous pouvez simplement coller dans la section où vous le souhaitez en tant que sous-requête.
Créez vos propres modèles avec uniquement un extrait de code. Ensuite, à la place, ouvrez le modèle en tant que nouveau document, faites-le simplement glisser vers votre requête actuelle pour insérer l'extrait de code.
Un extrait peut simplement être un ensemble d'en-tête avec des commentaires ou simplement un simple morceau de code.
Si vous ne pensez pas à démarrer une transaction avant la suppression de vos statemens, vous pouvez accéder aux options et définir les transactions implicites par défaut dans toutes vos requêtes. Ils nécessitent toujours un commit/rollback explicite.
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.
Votre connexion a une base de données par défaut définie par le DBA (pour moi, c'est généralement celle qui est indésirable presque à chaque fois).
Si vous souhaitez qu'il soit différent en raison du projet sur lequel vous travaillez actuellement.
Dans le "volet Serveurs enregistrés"> clic droit> Propriétés> onglet Propriétés de connexion> se connecter à la base de données.
(Vous les avez peut-être déjà fait)
Enregistrez le serveur plusieurs fois, chacun avec une connexion différente. Vous pouvez ensuite ouvrir plusieurs fois le même serveur dans le navigateur d'objets (chacun avec une connexion différente).
Pour exécuter la même requête que vous avez déjà écrite avec une connexion différente, au lieu de copier la requête, faites simplement un clic droit sur le volet de requête> Connexion> Modifier la connexion.
Utilisez le bouton Filtrer dans l'Explorateur d'objets pour rechercher rapidement un objet particulier (table, procédure stockée, etc.) à partir d'un texte partiel dans le nom ou rechercher des objets qui appartiennent à un schéma particulier.
Une autre chose qui aide à améliorer la précision de ce que je fais n'est pas vraiment une astuce de studio de gestion, mais une astuce utilisant 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 de pouvoir 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'
(notez que j'ai utilisé select * ici juste à titre d'illustration, je ne sélectionnerais normalement que les quelques champs dont j'ai besoin pour voir que la requête est correcte. Parfois, j'ai peut-être besoin de voir les champs des autres tables dans la jointure ainsi que les enregistrements que je prévois de supprimer pour vous assurer que la jointure a fonctionné comme je le pensais)
Lorsque vous exécutez ce code, exécutez d'abord la sélection pour vous assurer qu'elle est correcte, puis commentez la ou les lignes de sélection et décommentez les parties de suppression ou de mise à jour. En procédant de cette façon, vous n'exécutez pas accidentellement la suppression ou la mise à jour avant de l'avoir vérifiée. Vous évitez également le problème d'oublier de commenter la sélection, ce qui entraîne la mise à jour de tous les enregistrements de la table de base de données qui peuvent se produire si vous utilisez cette syntaxe et de décommenter 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 décommentez la sélection et oubliez de la commenter à nouveau, oups vous venez de mettre à jour la table entière, puis exécutez une sélection lorsque vous pensiez simplement exécuter la mise à jour. Quelqu'un vient de le faire dans mon bureau cette semaine, ce qui permet à une seule personne parmi tous les clients de se connecter aux sites Web des clients. Alors évitez de faire ça.
J'ai une tâche planifiée qui écrit chaque nuit chaque objet (table, sproc, etc.) dans un fichier. J'ai une indexation de recherche en texte intégral sur le répertoire de sortie, donc quand je cherche une certaine chaîne (par exemple, une constante) qui est enterrée quelque part dans la base de données, je peux la trouver très rapidement.
Dans Management Studio, vous pouvez utiliser la commande Tâches> Générer des scripts ... pour voir comment procéder.
J'aime configurer le raccourci clavier de CTRL + F1 as 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 défaut ALT + F1 sp_help raccourci.
Je suis développeur du complément SSMSBoost qui a été récemment publié pour SSMS2008/R2, l'intention était d'ajouter des fonctionnalités qui accélèrent les tâches quotidiennes:
Raccourcis: F2 dans l'éditeur SQL): objet de script situé sur le curseur non marqué
CTRL + F2 - (dans l'éditeur SQL): recherchez l'objet situé sous le curseur dans l'Explorateur d'objets et concentrez-le + Il comprend l'éditeur de raccourcis, qui manque dans SSMS2008 (arrive dans SSMS2012)
sSMSBoost ajoute également une barre d'outils avec des boutons:
select * from
et vous pouvez également ajouter vos propres paires de remplacement de jetonAffichez le Query Designer avec CTRL + SHIFT + Q
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
Si vous avez besoin d'écrire beaucoup de sprocs pour une API quelconque. Vous aimerez peut-être ces outils que j'ai écrits quand j'étais programmeur. Supposons que vous ayez une table de 200 colonnes qui doit avoir un sproc écrit pour insérer/mettre à jour et un autre pour supprimer. Parce que vous ne voulez pas que votre application accède directement aux tables. Juste 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-or-writing-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&lngWId=5
En utilisant TAB sur le texte en surbrillance le mettra en retrait. Idéal pour organiser facilement votre code dans un format lisible. Également, SHIFT + TAB sera indenté.
Devart 'SQL Complete express edition est un addon SSMS et est un addon gratuit et utile. Il fournit des fonctionnalités de formatage de code et d'intellisense bien nécessaires.
J'utilise également SSMSToolsPack
addon et c'est très bon. J'adore;
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 lorsque vous migrez vers SSMS 2012. Sinon, il peut être judicieux de le sevrer.
F5 pour exécuter la requête en cours est un gain facile, après cela, les commandes génériques de l'éditeur MS de CTRL + K + C pour commenter le texte sélectionné, puis CTRL + K + U à décommenter.
L'utilisation de signets est un excellent moyen de garder votre raison si vous travaillez avec ou 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 se situe 200 lignes plus bas dans la requête interne. Vous pouvez mettre en signet les deux emplacements, puis rapidement aller et venir entre les deux.
Utilisez la fonctionnalité TRY/CATCH pour détecter les erreurs.
La programmation Expert SQL Server 2005 d'Adam Machanic est une excellente ressource pour des techniques et des pratiques solides.
Utilisez le chaînage de propriété pour les proc stockés.
Utilisez des schémas pour appliquer la sécurité des données et les rôles.
Utilisez Détails de l'Explorateur d'objets au lieu de l'Explorateur d'objets pour afficher vos tables, de cette façon, vous pouvez appuyer sur une lettre et la faire passer à la première table avec ce préfixe de lettre.
Si vous travaillez avec des développeurs, obtenez souvent un morceau de code formaté en une longue ligne de code, puis le module complémentaire sql pretty printer pour SQL Server Management Studio peut beaucoup aider avec plus de 60+ options de formatage. http://www.dpriver.com/sqlpp/ssmsaddin.html
ALT+SHIFT
+ SélectionC'est un excellent que j'ai découvert récemment - il vous permet de sélectionner une section rectangulaire de texte indépendamment des sauts de ligne. Très pratique pour découper rapidement une sous-requête ou une liste.
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 Open
, elle utilisera une grille modifiable dans laquelle vous pouvez modifier les cellules. Si vous cliquez avec le bouton droit sur la base de données et sélectionnez New Query
il créera un type de fenêtre légèrement différent dans lequel vous ne pouvez pas modifier la grille mais il vous donne quelques autres fonctionnalités intéressantes, comme autoriser différents extraits de code et vous permettre de les exécuter séparément par sélection.
Utiliser un SELECT INTO
requête pour faire rapidement et facilement des tables de sauvegarde pour travailler et expérimenter.
Je recommande chaleureusement 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) est tout simplement génial! :)
Il a cependant un prix. Il n'y a pas de version gratuite de la chose.