在visual studio(2008)的SQL querybuilder窗口中创建此查询时:
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单独记录那条记录,它会更新大量的记录。
现在疯狂的部分是:当使用视觉查询构建器并且我拖放查询时,它会产生完全相同的查询,但现在visual studio不会弄乱它并执行它并且一切都很好。 / p>
如果我再次将其复制并粘贴到新的查询窗口中,则所有窗口都会再次瘫痪。
这个'智能'查询跛子有没有解决方法? (例如关掉它?)
谢谢!
编辑: 附:这已被发布为Microsoft的错误。请开始投票; ^)
答案 0 :(得分:0)
如果您在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)
答案 1 :(得分:0)
微软称他们将在即将推出的VisualStudio(2010)中添加关闭智能sql重新排序的选项
答案 2 :(得分:0)
我遇到了“VS知道更好”的问题。 结束向我的应用程序添加按钮以运行正确的查询。