Existe-t-il un concept de «fichier inclus» dans SQL Server?

19

J'ai un ensemble de scripts qui doivent être exécutés dans un certain ordre. Je voudrais créer un "fichier maître" qui répertorie tous les autres fichiers et leur ordre correct. Fondamentalement, comme un fichier include de C ++ ou ASP / VBScript.

Jonathan Allen
la source

Réponses:

19

Si vous utilisez SQLCMD , vous pouvez utiliser :r FileNamepour inclure un fichier .sql distinct.

: r FileName

Analyse les instructions T-SQL supplémentaires et les commandes SQLCMD du fichier spécifié par FileName dans le cache d'instructions. FileName est lu par rapport au répertoire de démarrage de Visual Studio. Le fichier est lu et exécuté après avoir rencontré un terminateur de lot. Vous pouvez exécuter plusieurs commandes: r. Le fichier peut inclure n'importe quelle commande SQLCMD, y compris le terminateur de lot défini dans Outils, Options. Vous pouvez utiliser: r dans un script de pré-déploiement ou de post-déploiement pour inclure d'autres scripts.

Michael Fredrickson
la source
Utilisez-vous cette fonctionnalité vous-même?
bernd_k
Je l'utilise beaucoup dans les projets SQL Server Data Tools. Cela aide vraiment lorsque j'essaie d'organiser les exemples de données qui s'exécutent en tant que script de publication.
Jonathan Allen
4

Dans le sens des anciens préprocesseurs C, certainement pas


Si vous avez un ensemble de fichiers avec des chemins absolus donnés, que vous souhaitez inclure dans un ordre inconditionnel, vous pouvez utiliser l'outil de ligne de commande sqlcmd ou utiliser SSMS dans sqlcmdmode comme mentionné par @mfredrickson et @Marian.


Mais si vous voulez des chemins relatifs ou des inclusions conditionnelles, vous devez utiliser un wrapper appelant sqlcmd (ou l'un de ses prédécesseurs obsolètes isql ou osql).

Actuellement à mon travail dans cette situation, je suis en train de revoir et d'étendre le vieux code vbs et hta. Je ne suis pas complètement satisfait, mais c'est une décision pragmatique. Il fonctionne et l'utilisateur final est à la maison avec l'interface graphique hta et aucune installation de logiciel supplémentaire n'est requise.

Pour une nouvelle conception, je commencerais à penser à utiliser WPF et PowerShell pour encapsuler les appels de sqlcmd, mais avec nos clients actuels, je ne peux pas présumer la présence de PowerShell V2.

Dans les temps anciens, nous écrivions des lots cmd simples à cet effet, certains d'entre eux étant encore utilisés.

Je suppose qu'il existe des outils actuels, en particulier ceux ciblant les workflows, qui pourraient convenir ici. Je ne les connais pas.

bernd_k
la source
3

En plus du mode SQLCMD dans Management Studio, vous pouvez également utiliser un fichier de commandes à utiliser comme fichier maître pour organiser et appeler tous vos fichiers SQL à l'aide de l' utilitaire SQLCMD .

Le mode SQLCMD est une simulation de l'utilisation des utilitaires dans Management Studio, il n'y a donc pas de grande différence entre les modes. Sauf que parfois je préfère exécuter des batchs (plus d'ouverture de M Studio ... chargement de db correct ... etc). Je préfère tout configurer dans le lot, y compris les fichiers de sortie.

Marian
la source
2

Je suis d'accord, un préprocesseur T-SQL est absolument nécessaire. J'ai développé mon propre en C #, ce qui m'a pris environ une heure. Outre le contrôle de l'ordre d'exécution des scripts SQL, cela me permet également d'avoir des macros qui ressemblent à des FDU scalaires et qui sont pratiques à utiliser, mais qui fonctionnent aussi rapidement que des FDU en ligne.

AK
la source
+1 - J'ai fait ce genre de choses avec des outils de modélisation à plusieurs reprises. Bien que sqlcmd ait certaines fonctionnalités pour la substitution de variables, je donnerais un gros bisou à quelqu'un qui a implémenté un plugin de pré-processeur macro décent pour SSMS.
ConcernedOfTunbridgeWells
1
@AK, cela vous dérangerait-il d'élaborer un peu plus à ce sujet? Peut-être publier du code sur github?
craig
2

J'aime la réponse de bernd_k . Selon la façon dont vous avez nommé vos scripts, comme l'inclusion d'un nombre, SQL Server PowerShell (SQLPS) peut être utilisé si vous exécutez SQL Server 2008 ou une version ultérieure. Ensuite, même si vous utilisiez SQL 2005, vous pourriez utiliser PowerShell et le SMO pour 2005.

Note latérale: Je crois que SQLCMD sera finalement mis sur la liste dépréciée et sera remplacé par SQLPS, PowerShell.

Il existe également quelques autres options.

  1. Configurez chaque script en tant qu'étape dans un travail de l'Agent SQL. Vous pouvez définir l'ordre d'exécution.
  2. Créez un package SSIS pour appeler chaque fichier. Cela peut offrir un peu plus de contrôle et offrir un peu plus d'options de journalisation. J'aime cette méthode si le résultat d'un script doit être vérifié avant l'exécution du suivant.
Shawn Melton
la source
Je ne pense pas que SQLCMD sera déprécié car il est essentiel au fonctionnement des outils de données SQL Server et des DACPAC.
Jonathan Allen
@JonathanAllen S'il vous arrive de trouver une documentation actuelle qui montre la gestion des DACPAC à l'aide de SQLCMDme le faire savoir, car la plupart de ce que je trouve fait référence à PowerShell . Je ne vois pas non plus la référence où sqlcmdest utilisé avec SSDT sauf peut-être pour la comparaison de schéma, mais je n'utilise jamais les scripts générés.
Shawn Melton
Les scripts SSDT sont des scripts sqlcmd. C'est ainsi qu'il gère les paramètres, définis par l'utilisateur et des choses comme le nom de la base de données. Si vous souhaitez déployer le DACPAC à l'aide de SqlPackage.exe, ce lien montre comment transmettre les paramètres sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen