2010-08-25 3 views
0

J'ai la procédure stockée suivante:sorties de la procédure stockée de contrôle

SET @sql = 'RESTORE DATABASE ' + quotename(@dbname) + ' 
      FROM DISK = N''E:\sql\template_' + @dbnamebak + '.bak'' 
      WITH FILE = 1, 
      MOVE N''FromTemplate' + @dbname + '.Data'' TO N''E:\sql\' + @dbname + '.mdf'', 
      MOVE N''FromTemplate' + @dbname + '.Log'' TO N''E:\sql\' + @dbname + '_log.LDF'', NOUNLOAD'; 
EXEC (@sql); 

Je voudrais faire la sortie 1 ou 0 au lieu de:

Processed 8584 pages for database 'DatabaseName', file 'DatabaseName.Data' on file 1. 
Processed 1 pages for database 'DatabaseName', file 'DatabaseName' on file 1. 
RESTORE DATABASE successfully processed 8585 pages in 3.929 seconds (17.899 MB/sec). 

Est-il possible de contrôler cela? Utilisation de SQL Server 2005.

+0

Habituellement, faire un SET NOCOUNT ON - fonctionne avec des requêtes régulières pour empêcher les messages - XX Rows Affected -. Avez-vous essayé d'utiliser ça? – InSane

+0

Oui, il a ça. Était après avoir éliminé/manipuler toute la sortie si possible. – Kvad

Répondre

1

Que signifie "sortie"? Il existe au moins quatre façons de renvoyer des informations à partir d'une procédure stockée: ensemble (s) de résultats, paramètre (s) de sortie, PRINT et le code de retour.

Je ne pense pas que vous pouvez supprimer la sortie, mais vous pouvez mettre votre instruction RESTORE dans un bloc TRY/CATCH. Si le RESTORE échoue, renvoyez votre code d'erreur du bloc CATCH, sinon retournez le succès du corps de la procédure principale.

Sinon, n'utilisez pas une procédure stockée mais un script externe. Je trouve cela beaucoup plus facile dans de nombreux cas lorsque vous travaillez avec des sauvegardes et d'autres opérations qui vous obligent à manipuler des noms de fichiers et même des fichiers physiques. Vous pouvez utiliser Smo à partir d'un script Powershell, par exemple.