Générer des dépôts multiples et filtrés + créer des procédures stockées
-
06-07-2019 - |
Question
J'ai ce script:
select name,create_date,modify_date from sys.procedures order by modify_date desc
Je peux voir quelles procédures ont été modifiées récemment. J'ajouterai un " où modify_date > = " Et j'aimerais utiliser une procédure stockée système qui me générera: déposer + créer des scripts pour les procédures stockées (disons 5 correspondances)
Puis-je le faire en quelque sorte?
merci
ok j'ai la version finale:
http://swooshcode.blogspot.com /2008/10/generate-stored-procedures-scripts-for.html
vous les gars beaucoup aidé
merci
La solution
Ce n'est pas joli, mais ça marche. Exécutez la sortie manuellement ou exécutez-la avec sp_executesql.
SELECT OBJECT_DEFINITION(object_id), 'drop procedure [' + name + ']'
FROM sys.procedures
WHERE modify_date >= @date
Vous devrez également vous soucier des droits perdus.
Autres conseils
Aucun curseur nécessaire (modifiez-le comme vous le souhaitez pour les schémas, etc.):
DECLARE @dt AS datetime
SET @dt = '10/1/2008'
DECLARE @sql AS varchar(max)
SELECT @sql = COALESCE(@sql, '')
+ '-- ' + o.name + CHAR(13) + CHAR(10)
+ 'DROP PROCEDURE ' + o.name + CHAR(13) + CHAR(10)
+ 'GO' + CHAR(13) + CHAR(10)
+ m.definition + CHAR(13) + CHAR(10)
+ 'GO' + CHAR(13) + CHAR(10)
FROM sys.sql_modules AS m
INNER JOIN sys.objects AS o
ON m.object_id = o.object_id
INNER JOIN sys.procedures AS p
ON m.object_id = p.object_id
WHERE p.modify_date >= @dt
PRINT @sql -- or EXEC (@sql)
Vous pouvez utiliser un curseur pour parcourir chaque enregistrement:
DECLARE @spName NVARCHAR(128)
DECLARE myCursor CURSOR FOR SELECT name FROM sys.procedures ORDER BY modify_date DESC
OPEN myCursor
FETCH NEXT FROM myCursor INTO @spName
WHILE @@fetch_status = 0
BEGIN
-- Process each stored procedure with a dynamic query
PRINT @spName
FETCH NEXT FROM myCursor INTO @spName
END
CLOSE myCursor
DEALLOCATE myCursor
En attendant, j'ai fait des recherches, et il semble que
sp_helptext 'my_stored_procedure'
est ce dont j'ai besoin, (plus la partie que je savais déjà quand j'ai posé la question plus expliquée par jdecuyper)
Cela s’effectue mieux dans un langage plus approprié que SQL. Malgré ses nombreuses extensions telles que T-SQL, PL / SQL et PL / pgSQL, SQL n’est pas la meilleure chose à faire pour cette tâche.
Voici un lien vers une question similaire, et ma réponse, qui consistait à utiliser SQL-DMO ou SMO, selon que vous utilisiez SQL 2000 ou 2005.