2013-08-05 66 views
3

如何將下面的sql查詢的消息選項卡結果插入TableTest2如何將SQL消息選項卡輸出插入到表中?

CREATE TABLE TableTest2 (InsertOutput VARCHAR(100)) 
CREATE TABLE TestTable (ID INT, msg VARCHAR(50))  
INSERT TestTable (ID, msg) 
VALUES (1, 'Message 1'), (2,'Message 2')  
DROP table TestTable 

下面是運行上面的查詢結果:

(2 row(s) affected) 

如何插入上述結果爲TableTest2

+1

只是行數具體還是所有消息一般?如果所有的消息都是通過TSQL運行的,除非你用'DBCC OUTPUTBUFFER'做了一些瘋狂的事情。你可以在C#中通過'Connection.InfoMessage'訪問它。 –

+1

在插入'@@ ROWCOUNT'後面立即包含'2',你可以插入到一個合適的整數字段 –

+0

我想在消息選項卡上插入輸出。在這種情況下是: - (2行受影響) –

回答

1

在SQL SERVER @@ROWCOUNT返回受操作影響的行數。你可以做類似

DECLARE @iRec int 

INSERT TestTable (ID, msg) 
VALUES (1, 'Message 1'), (2,'Message 2')  

SET @iRec = @@ROWCOUNT; 

INSERT TableTest2(InsertOutput) 
VALUES (CAST(@iRec as VARCHAR(10)) + ' row(s) affected') 
+1

@@ Rowcount返回插入記錄的數量。但運行上述查詢將返回:**(2行受影響)**在消息選項卡上。我想插入消息選項卡上返回的內容。你的回答並不能解決我的問題。 –

+0

插入到TableTest2中的消息將受到'2行(S)受影響。「隨意添加打開/關閉parentesses根據需要。 @@ ROWCOUNT將爲SELECT,DELETE,UPDATE等做相同的操作。 –

+0

我無法添加/關閉圓括號,因爲如果查詢在消息選項卡上返回錯誤消息,那麼我就搞砸了。我仍然希望在消息選項卡上插入該錯誤消息。 @YuriyGalanter –

2

捕獲實際輸出的唯一方法是使用C#(或任何其他非sql語言)來執行命令。這可以在CLR擴展中完成。 tSQLt數據庫單元測試框架包含用於測試目的的捕獲輸出的過程tSQLt.CaptureOutput。你可以看到它是如何在executeCommand方法中http://sourceforge.net/p/tsqlt/code/219/tree/tSQLtCLR/tSQLtCLR/TestDatabaseFacade.cs使用一個OnInfoMessage事件處理(在第64行開始):

public SqlDataReader executeCommand(SqlString Command) 
    { 
     infoMessage = SqlString.Null; 
     connection.InfoMessage += new SqlInfoMessageEventHandler(OnInfoMessage); 
     SqlCommand cmd = new SqlCommand(); 

     cmd.Connection = connection; 
     cmd.CommandText = Command.ToString(); 

     SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 

     return dataReader; 
    } 

    protected void OnInfoMessage(object sender, SqlInfoMessageEventArgs args) 
    { 
     if (infoMessage.IsNull) 
     { 
      infoMessage = ""; 
     } 
     infoMessage += args.Message + "\r\n"; 
    } 

如果你只是想用這個測試的目的看看tSQLt.org開源tSQLt單元測試框架有助於處理自動測試過程中經常遇到的很多事情。

相關問題