我有两台服务器通过低速连接连接,我们正在运行带有Merge复制的SQL Server 2008。
在订阅者处,有时在尝试插入新行时,我收到此错误:
触发器返回结果集和/或以SET NOCOUNT OFF运行 而另一个出色的结果集是活跃的。
DataTables
和TableAdapters
使用交易我检查了什么:
问题:
答案 0 :(得分:3)
触发器返回各种“结果集”,即受影响的行数。 “(1行(s)受影响)//或n行....”我不知道为什么这被解释为结果集但它确实如此。
今天我遇到了类似的问题,我意识到可以通过在触发器结束时设置一个SET NOCOUNT来解决此问题。仅在触发器顶部设置SET NOCOUNT是不够的。
我所指的触发器是你的应用程序中预先制作的“insert”语句。这很可能是抛出SQL错误的声明。
现在你可以使用sp_configure'disallow results from triggers'1,但是,这会为整个数据库禁用它,这可能是不可取的,以防你期望其他触发器返回结果集。
如果我的回答不够,我使用的Source的OP描述了你遇到的完全相同的问题。此外,MSDN曾说过
将在SQL Server的未来版本中删除从触发器返回结果集的功能。避免在新的开发工作中从触发器返回结果集,并计划修改当前执行此操作的应用程序。若要防止触发器在SQL Server 2005中返回结果集,请将“禁止触发器结果”选项设置为1.在将来的SQL Server版本中,此选项的默认设置为1。
答案 1 :(得分:0)
我遇到了同样的问题并找到了解决方案。
问题是带有结果集的存储过程,该结果集在此触发器中执行。
看来,这个存储过程导致触发器也有结果集。
答案 2 :(得分:0)
我遇到了同样的问题。
问题是带有select:
的插入insert into table (...)
select ...
问题是select有一个group语句并返回:
警告:聚合或其他SET操作消除了空值。
这导致了问题,我通过max(field)
更改了指令max(coalesce(field,''))
以避免max group函数中的空操作。
答案 3 :(得分:0)
在脚本顶部设置
开启NOCOUNT;