Question

Je veux faire quelque chose comme:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

Je peux le faire en DTS. Existe-t-il un moyen de le faire dans transact sql? Ou est-il possible de le faire avec un script batch (par exemple, vbs ou powershell)?

Était-ce utile?

La solution

sp _ start _ job

Je suis en train de faire la même chose pour le moment, et la seule façon pour moi d'éviter d'utiliser SSIS ou un shell externe est de scinder manuellement ma routine de chargement en "threads", puis de lancer un seul travail maître SQLAgent. qui exécute à son tour autant de sp _ start _ que de threads. À partir de ce moment, ils fonctionnent tous de manière autonome.

Ce n'est pas exactement ce que nous recherchons, mais le résultat est le même. Si vous testez l'état des travaux pour les sous-travaux, vous pouvez également implémenter votre démarrage conditionnel de sproc 3.

Quel est l'intérêt de 8 cœurs si nous ne pouvons pas les utiliser tous en même temps?

Autres conseils

Vous pouvez créer une procédure stockée CLR qui (avec C #) appelle les deux premiers sur leurs propres threads, puis les bloque jusqu'à ce que les deux soient terminés ... puis lancez la troisième.

Pouvez-vous utiliser les sprocs CLR dans votre situation? Si tel est le cas, je modifierai cette réponse pour avoir plus de détails.

Avez-vous absolument besoin que les deux SP soient exécutés en parallèle?

Avec des instructions CRUD simples au sein d'un SP unique, j'ai constaté que SQL S. réussissait très bien à déterminer lesquelles d'entre elles pouvaient être exécutées en parallèle. Je n'ai jamais vu SQL S. exécuter 2 SP en parallèle si les deux sont appelés séquentiellement à partir d'une instruction T-SQL. Je ne sais même pas si c'est même possible.

Maintenant, le DTS les exécute-t-il réellement en parallèle? Il se peut qu’il les exécute simplement de manière séquentielle, puis appelle le 3ème SP une fois la dernière terminée avec succès.

S'il les exécute vraiment en parallèle, vous devriez probablement vous en tenir à DTS, mais j'aimerais savoir ce qu'il fait si j'ai un package DTS appelant, disons, 10 SP puissants en parallèle ... Je peux faire des tests pour apprendre que moi-même: D

Vous pouvez utiliser SSIS. L'avantage de ceci est que le paquet peut être stocké dans le serveur SQL et facilement planifié là-bas.

À partir de PowerShell ou de n’importe quel langage de script externe, vous pouvez utiliser la ligne de commande SQL osql ou sqlcmd. Cette technique peut également être utilisée pour la planifier sur SQL Server en utilisant également xp_cmdshell.

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