2012-05-10 27 views
1

在MS SQL 2008 R2上,我希望能夠將消息輸出到變量中。我需要在許多數據庫上運行腳本。捕獲消息輸出(來自print或raiserror的消息)並將其記錄到表中。我需要從存儲過程中完成此操作。如何將MSSQL PRINT輸出存儲到變量

對於此腳本

Declare @sqlscript nvarchar(500) 

Set @sqlscript = 
'select * from sys.objects 
raiserror (''My raised error'', 10,1) 
select * from sys.schemas 
print ''my print''' 

EXEC sp_executesql @sqlscript 

我想獲得

My raised error  
my print 

(60 row(s) affected) 
My raised error 

(21 row(s) affected) 
my print 

更新
我決定去與@rs建議。登錄到桌面是我最簡單的方法。使用SP記錄(以保持代碼清潔),再加上一個小的正則表達式來重構我的所有腳本。解決方案將爲明天做好準備。非常感謝。

+0

在你的exec語句後面檢查'@@ error','@@ rowcount'例如:'SELECT @@ rowcount' –

+0

sp_executesql後,@@ error和@@ rowcount都爲0,因爲最後一個statem恩是一個印刷品。它只會給我提供最後一條語句的信息,而不會執行完整的腳本。 –

+1

你可以使用插入到表而不是打印?用'插入到logtable(msg)值'('print')替換'print'我的print''' –

回答

2

你也許可以使用類似的CLR和技術:

http://blogs.msdn.com/b/mattm/archive/2007/09/13/capture-print-messages-from-a-stored-procedure.aspx

但最好的選擇是可能EXEC成只是有一個單一的VARCHAR列臨時表:

http://msdn.microsoft.com/en-us/library/aa175921%28v=sql.80%29.aspx

+0

CLR不是一個選項,我們託管在一個服務器上,它沒有向我們提供正確的證書來使用CLR和我剛剛測試過的EXEC選項,但我無法使它工作。我可以從Stored Proc中獲得結果,但不能收到消息。 –