5

如何将以下 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

4

2 回答 2

3

捕获实际输出的唯一方法是使用 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 单元测试框架有助于解决自动化测试期间经常遇到的许多问题。

于 2013-08-05T18:52:25.587 回答
2

在 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')
于 2013-08-05T18:34:21.847 回答