Можно ли отключить «умного» SQL-помощника Visual Studio? - PullRequest
1 голос
/ 10 ноября 2009

При создании этого запроса в окне построителя запросов SQL в Visual Studio (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)

Который вместо того, чтобы выделять эту 1 запись с определенным msgreference и connectionid, обновляет тонны записей.

Теперь сумасшедшая часть: при использовании визуального построителя запросов и перетаскивания запроса он приводит к точно такому же запросу, но теперь Visual Studio не связывается с ним и выполняет его, и все в порядке. 1009 *

Если я скопирую и снова вставлю его в новое окно запроса, все снова будет повреждено.

Есть ли обходной путь для этого "умного" ограничителя запросов? (Например, выключить?)

Спасибо!

EDIT: постскриптум это было опубликовано как ошибка в Microsoft. Пожалуйста, начните голосовать за него; ^)

вот ссылка на майкрософт

Ответы [ 3 ]

0 голосов
/ 22 января 2010

Microsoft заявила, что добавит возможность отключения интеллектуального переупорядочения SQL в предстоящем VisualStudio (2010)

0 голосов
/ 26 февраля 2013

У меня была такая же проблема с "VS знает лучше". Закончилась кнопка добавления в мое приложение для запуска правильного запроса.

0 голосов
/ 10 ноября 2009

У вас возникает та же проблема, если вы используете псевдоним таблицы в предложении 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...