如何将SQL消息选项卡输出插入表中?

时间:2013-08-05 18:27:11

标签: sql sql-server

如何将以下sql查询的消息选项卡结果插入TableTest2

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

2 个答案:

答案 0 :(得分: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单元测试框架可以帮助解决自动化测试中经常遇到的很多问题。

答案 1 :(得分: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')