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

Était-ce utile?

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.

Comment copier une base de données avec c #

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