powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с параметрами к СУБД
5 сообщений из 5, страница 1 из 1
Запрос с параметрами к СУБД
    #40000781
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть запрос, который в СУБД приходит с приклада.
В СУБД виден текст запроса вида:
(@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 абсолютно другой план.
...
Рейтинг: 0 / 0
Запрос с параметрами к СУБД
    #40000793
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

К такому виду приводятся запросы через sp_prepare + sp_execute / sp_prepexec - почитайте про них.
А план запроса у вас разный не потому что вы как то по другому указываете declare параметры, а по тому что у вас настройки сессии из приложения и из ssms отличаются
...
Рейтинг: 0 / 0
Запрос с параметрами к СУБД
    #40000811
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Спасибо за ответ. Про sp_ почитаю, на первый взгляд похоже на нужное)
А можно пару примеров, какие из настроек сессии могут влиять на план запроса?
...
Рейтинг: 0 / 0
Запрос с параметрами к СУБД
    #40000854
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
select 
      c, iif([v] = 1, 'SET', '')

 from (
      select cast([date_first] as bit) as [date_first],
             cast([quoted_identifier] as bit) as [quoted_identifier],
             cast([arithabort] as bit) as [arithabort],
             cast([ansi_null_dflt_on] as bit) as [ansi_null_dflt_on]
      from sys.dm_exec_sessions where session_id = @@SPID 
) src 
unpivot (
 v for c in ([date_first], [quoted_identifier], [arithabort], [ansi_null_dflt_on])
) as unpvt



для сессии ssms прямо там же выполните:
Код: sql
1.
dbcc useroptions



и сравнить что у вас там отличается, обычно это set ansi_warnings + quoted_identifier зависит какой драйвер использует приложение для подключения к базе
...
Рейтинг: 0 / 0
Запрос с параметрами к СУБД
    #40001358
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Спасибо за ответ.
Ещё вспомнил, что в SSMS справа есть пункт с properties. Если открыть план из кеша, то будет для того запроса. Там размера плана, включенные опции, флаги трассировок и прочее. Вроде тоже для сравнения подойдёт.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с параметрами к СУБД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]