Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
21.09.2020, 10:46
|
|||
---|---|---|---|
|
|||
Запрос с параметрами к СУБД |
|||
#18+
Добрый день. Есть запрос, который в СУБД приходит с приклада. В СУБД виден текст запроса вида: (@P1 int,@P2 int,@P3 int,@P4 int) SELECT top 1000 *, и дальше. Но при запуске в таком виде пишет, что This syntax is only allowed for parameterized queries. Must declare the scalar variable "@P1". Если сделать через declare, то запрос запускается. Но при этом план запроса выходит другим, используются иные индексы. По идее, если запрос с таким текстом есть в кеше, то так и выполнялся. Кто-то может подсказать, как это делается через SSMS? К текущему плану запроса есть вопросы и доработки, но сложно что-то делать, если у запроса через declare и SSMS абсолютно другой план. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.09.2020, 11:16
|
|||
---|---|---|---|
Запрос с параметрами к СУБД |
|||
#18+
Danion, К такому виду приводятся запросы через sp_prepare + sp_execute / sp_prepexec - почитайте про них. А план запроса у вас разный не потому что вы как то по другому указываете declare параметры, а по тому что у вас настройки сессии из приложения и из ssms отличаются ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.09.2020, 11:36
|
|||
---|---|---|---|
|
|||
Запрос с параметрами к СУБД |
|||
#18+
felix_ff, Спасибо за ответ. Про sp_ почитаю, на первый взгляд похоже на нужное) А можно пару примеров, какие из настроек сессии могут влиять на план запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.09.2020, 12:42
|
|||
---|---|---|---|
Запрос с параметрами к СУБД |
|||
#18+
Danion felix_ff, Спасибо за ответ. Про sp_ почитаю, на первый взгляд похоже на нужное) А можно пару примеров, какие из настроек сессии могут влиять на план запроса? для сессии приложения вам нужно получить ее @@SPID или по host_name() узнать строку ну или по совокупности параметров, думаю запрос напишите дальше сами, все колонки опций set есть в представлении sys.dm_exec_sessions Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
для сессии ssms прямо там же выполните: Код: sql 1.
и сравнить что у вас там отличается, обычно это set ansi_warnings + quoted_identifier зависит какой драйвер использует приложение для подключения к базе ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.09.2020, 15:49
|
|||
---|---|---|---|
|
|||
Запрос с параметрами к СУБД |
|||
#18+
felix_ff, Спасибо за ответ. Ещё вспомнил, что в SSMS справа есть пункт с properties. Если открыть план из кеша, то будет для того запроса. Там размера плана, включенные опции, флаги трассировок и прочее. Вроде тоже для сравнения подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=46&mobile=1&tid=1685621]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 404ms |
0 / 0 |