在visual studio的SQL querybuilder窗口中创建此查询时(2008):
UPDATE outgoing_messages
SET readstatus = 5
FROM outgoing_messages INNER JOIN
connections ON outgoing_messages.connectionid = connections.connectionid
WHERE (outgoing_messages.msgreference = '103') AND (connections.providerid = 9)Visual studio知道得更清楚,并通过将其转换为:
UPDATE outgoing_messages
SET readstatus = 5
FROM outgoing_messages AS outgoing_messages_1 INNER JOIN
connections ON outgoing_messages_1.connectionid = connections.connectionid CROSS JOIN
outgoing_messages
WHERE (outgoing_messages_1.msgreference = '103') AND (connections.providerid = 9)它不是用特定的msgreference和connectionid来挑选1条记录,而是更新大量的记录。
现在最疯狂的部分是:当使用可视化查询构建器和我拖放查询时,它会产生完全相同的查询,但现在visual studio不会弄乱它并执行它,一切都很好。
如果我把它复制并粘贴到一个新的查询窗口中,所有的东西都会再次瘫痪。
这个“智能”查询抑制器有没有变通的办法?(例如,关闭它?)
谢谢!
编辑: p.s.这已经被发布为Microsoft上的一个错误。请开始投票;^)
发布于 2010-01-23 04:47:15
微软表示,他们将在即将到来的VisualStudio (2010)中增加关闭智能sql重新排序的选项。
发布于 2009-11-11 00:38:11
如果在UPDATE子句中为表设置别名而不是使用显式名称,是否会遇到同样的问题,即:
UPDATE om
SET readstatus = 5
FROM outgoing_messages om INNER JOIN
connections c ON om.connectionid = c.connectionid
WHERE (om.msgreference = '103') AND (c.providerid = 9)发布于 2013-02-26 20:13:28
我对"VS knows better“也有同样的问题。最终将按钮添加到我的应用程序中以运行正确的查询。
https://stackoverflow.com/questions/1708309
复制相似问题