如何将以下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
?
答案 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')