2010-08-25 42 views
0

我有以下存储过程:控制存储过程输出

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); 

我想使输出为1或而不是0:

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). 

是否有可能控制该?

使用SQL Server 2005.

+0

通常会执行SET NOCOUNT ON - 与常规查询一起使用,以防止“受影响的XX行”消息。你尝试过使用它吗? – InSane 2010-08-25 02:41:53

+0

是的,它有。如果可能的话,摆脱/操纵所有输出。 – Kvad 2010-08-25 02:50:22

回答

1

“输出”是什么意思?至少有四种方法可以从存储过程返回信息:结果集,输出参数,PRINT和返回码。

我不认为你可以抑制输出,但你可以把你的RESTORE语句放在TRY/CATCH块中。如果RESTORE失败,则从CATCH块返回失败代码,否则从主过程体返回成功。

或者,不要使用存储过程,而要使用外部脚本。我发现在许多情况下,处理备份和其他需要操作文件名甚至物理文件的操作时,实际上会更容易。例如,您可以使用Powershell脚本中的Smo。