J'ai créé une procédure stockée SQL Server 2005 qui recherche les objets dépendants sur une table particulière.appel de la procédure stockée dans un curseur
Je souhaite exécuter cette procédure stockée pour différentes bases de données et différentes tables. J'ai créé un curseur pour cela.
Lorsque j'écris USE @dbname
, il essaie de trouver la procédure stockée dans un nom @db et non la base de données en cours.
Quelqu'un peut-il s'il vous plaît m'aider avec comment écrire cette commande dans un curseur?
DECLARE name_cur CURSOR FOR
SELECT db_name, obj_name from Stats_Usage
WHERE last_user_update > '2011-06-01' ORDER BY db_name
DECLARE @tableName NVARCHAR (800)
DECLARE @dbName NVARCHAR(800)
DECLARE @sql NVARCHAR(900)
OPEN name_cur
FETCH name_cur INTO @dbName, @tableName
WHILE @@Fetch_Status = 0
BEGIN
SET @sql = 'USE '[email protected] +' EXEC proc_depend ' + @tableName
EXEC (@sql)
FETCH name_cur INTO @dbName, @tableName
END
CLOSE name_cur
DEALLOCATE name_cur
GO
Oui cela a fonctionné !! Je crée une table dans une procédure stockée que j'ai écrite. Mais quand je l'appelle à partir de la requête ci-dessus, il renvoie une erreur indiquant que la table existe déjà. Lorsque nous exécutons une procédure stockée, la table est-elle créée? Je suis confus. – CamAd
Mais est-ce vraiment important pour l'exécution de la procédure quelle base de données est en cours? Je pensais que tous les objets que les références SP sont considérés être dans la même base de données que le SP, à moins qu'ils ne soient explicitement qualifiés avec un nom de base de données différent. –