1

J'ai ce script:Générer multiples et Filtré + Créer Pendants procédures stockées

select name,create_date,modify_date from sys.procedures order by modify_date desc 

Je peux voir ce que les procédures ont été modifiées récemment. Je vais ajouter un « où modify_date> = » Et je voudrais utiliser une procédure stockée système, qui me générer: drop + créer des scripts pour le (disons 5 correspondance) procédures stockées

Puis-je fais ça en quelque sorte?

grâce


ok. J'ai la version finale:

http://swooshcode.blogspot.com/2008/10/generate-stored-procedures-scripts-for.html

les gars ont beaucoup aidés

merci

Répondre

2

Ce ain' t jolie, 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 aurez également à vous soucier des droits perdus.

0

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 
+0

cela était mon idée aussi , mais je pensais qu'il pourrait y avoir un système stocké proc, qui est le: - Traiter chaque procédure stockée avec une requête dynamique partie ... vous savez ce que je veux dire? (il doit y avoir quelque chose comme sp_generatesp 'sp_myproc' ... je suppose) – Swoosh

0

En attendant, je fait quelques recherches, et semble comme

sp_helptext 'my_stored_procedure' 

est ce que je dois, (plus la partie que je savais déjà quand je posé la question expliquée plus par jdecuyper)

1

Aucun curseur nécessaire (modifier comme désiré 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) 
0

Ceci est mieux fait 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 pour cette tâche.

Voici un lien vers une question similaire, et ma réponse, qui était d'utiliser SQL-DMO ou SMO, selon que vous avez SQL 2000 ou 2005.

How to copy a database with c#

Questions connexes