【发布时间】:2016-06-19 03:04:18
【问题描述】:
我正在 SQL Server 中编写一些动态 SQL。有几个查询合并为一个。第一个查询选择数据,第二个删除,第三个插入,最后一个删除临时表:
SET @completeSQL = @tempProdSQL + @deleteSQL + @insertSQL + ' DROP TABLE #tempProd'
PRINT(@completeSQL)
EXEC sp_ExecuteSQL @completeSQL
SET @archiveSize = @@ROWCOUNT
我知道我可以使用@@Rowcount,但我得到的值为 0。我相信这是因为最后一个命令是删除表。
有没有办法让@tempProdSQL 命令之后的行受到影响?如果会影响性能,我宁愿不分离执行。
【问题讨论】:
-
@@rowcount仅返回受先前执行语句影响的行。换句话说,你是对的,删除表会清除插入行的@@rowcount。但是,您的查询可能仍然存在问题。即使您删除了 drop table 语句,@@rowcount也只会返回受插入影响的行数。所以——如果你想得到@@rowcount的总积累量,你需要想出一种不同的方法。 -
可以使用sp_executesql来获取值,但是这样做会很麻烦。这将涉及调用 sp_executesql 中的每个部分,所有部分都包含在另一个 sp_executesql 中,并从
@tempProdSQL向下传递行数。这会很丑,Yobik 是对的——你可能想在这里重新考虑设计。 -
另外,在这种情况下,我不会关心性能。
rowcount的缓存无论如何都会发生,因此您不会通过尝试将其全部放入一个语句中来节省很多东西。
标签: sql sql-server tsql