2017-07-25 5 views
0

J'ai 70 requêtes SQL que je gère via Git/Stash. Afin de faciliter cela, j'ai divisé chaque requête en un fichier SQL individuel. Avant le fractionnement, le code fonctionnait en déclarant toute la variable avec la première requête et en les exécutant au total dans son ensemble. Les requêtes totalisent environ 10k lignes. Je voudrais écrire un script (prêt à apprendre) qui me permettrait de me connecter à la bonne base de données, déclarer quelques variables universelles, puis appeler tous les différents fichiers dans un dossier avec les variables déclarées. Ma première pensée est d'utiliser R et le paquet RODBC, mais je veux m'assurer que je suis sur le bon chemin avant de continuer. Est-ce possible et dois-je affiner mon approche?Puis-je exécuter plusieurs fichiers SQL (70) avec un script exécutable?

+1

Vous pouvez facilement boucle sur les fichiers avec R, et je utiliser le paquet RODBC pour créer et charger des données à partir de bases de données SQL tout le temps, donc je suppose que la réponse est oui. – Florian

+0

Oui, vous pouvez, et R n'est pas nécessaire - Je suppose que vous avez choisi R parce que c'est la langue que vous connaissez. Personnellement j'irais avec PowerShell parce que c'est déjà sur Windows donc je ne serais pas en ajoutant des dépendances supplémentaires. Mais fournir un script de travail pour vous dépasse la portée/l'intention de Stack Exchange. – alroc

Répondre

0

Vous pouvez exécuter un script en mode SQLCMD (dans SSMS, vous pouvez l'activer à partir du mode Requête/SQLCMD).

Le script principal définit la variable globale @msg et exécute les autres scripts qui partagent la variable avec eux:

:setvar path "F:\scripts" 

:on error exit 

SET XACT_ABORT ON 

declare @msg nvarchar(100) = 'This is a global variable defined in the main script.' 

:r $(path)/"script_1.sql" 
:r $(path)/"script_2.sql" 

Les deux fichiers scripts contiennent des instructions select simples qui utilisent la variable globale @msg.

script_1.sql:

select @msg + ' And this comes from script_1.sql' as RESULTS_FROM_SCRIPT_1 

script_2.sql:

select @msg + ' And this comes from script_2.sql' as RESULTS_FROM_SCRIPT_2  

Ceci est le résultat:

enter image description here