Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_prepare/sp_cursorprepare/sp_prepexec  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
А кто нить может аргументировано (ну хоть частично) сказать - [@cursor =] statement_handle OUTPUT - он по spid делится - или "нумерация" курсоров сквозная для всего сервера?
Может ли в двух разных сессиях жить два разных курсора с одним значением хэндла - или нет?

-------------------------
There’s no silver bullet!
17 июн 13, 16:35    [14443385]     Ответить | Цитировать Сообщить модератору
 Re: sp_prepare/sp_cursorprepare/sp_prepexec  [new]
Glory
Member

Откуда:
Сообщений: 104760
locky
Может ли в двух разных сессиях жить два разных курсора с одним значением хэндла - или нет?

Сделал 3 коннекта
declare curs1 cursor for select id from sysobjects
open curs1

В 4ом сделал
select * from sys.dm_exec_cursors(0)

Получил
session_id  cursor_id   name properties
54 180150009 curs1 TSQL | Snapshot | Read Only | Global (0)
56 180150003 curs1 TSQL | Snapshot | Read Only | Global (0)
57 180150003 curs1 TSQL | Snapshot | Read Only | Global (0)

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
18 июн 13, 10:25    [14446173]     Ответить | Цитировать Сообщить модератору
 Re: sp_prepare/sp_cursorprepare/sp_prepexec  [new]
Glory
Member

Откуда:
Сообщений: 104760
Забыл уточнить, что sql_handle у совпадающих cursor_id тоже совпадает.
Что наводит на мысль, о повторном использовании уже открытых курсоров в разных коннектах. Что выглядит логичным.
А коннекте 54 текст пакета отличался наличием закомментированных(!) команд

session_id  cursor_id   name sql_handle text
54 180150009 curs1 0x02000000D9934F03AF963D8CBF2ED0FE3FA29AA74FE08FC3 declare curs1 cursor for select id from sysobjects open curs1 --close curs1 --deallocate curs1
56 180150003 curs1 0x0200000087BB6E0438E3B0008A444CAAB718A02359B90474 declare curs1 cursor for select id from sysobjects open curs1
57 180150003 curs1 0x0200000087BB6E0438E3B0008A444CAAB718A02359B90474 declare curs1 cursor for select id from sysobjects open curs1

Имхо
Нумерация сквозная. Как раз для повторного использования
18 июн 13, 10:45    [14446296]     Ответить | Цитировать Сообщить модератору
 Re: sp_prepare/sp_cursorprepare/sp_prepexec  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Glory
Забыл уточнить, что sql_handle у совпадающих cursor_id тоже совпадает.
Что наводит на мысль, о повторном использовании уже открытых курсоров в разных коннектах. Что выглядит логичным.
А коннекте 54 текст пакета отличался наличием закомментированных(!) команд

session_id  cursor_id   name sql_handle text
54 180150009 curs1 0x02000000D9934F03AF963D8CBF2ED0FE3FA29AA74FE08FC3 declare curs1 cursor for select id from sysobjects open curs1 --close curs1 --deallocate curs1
56 180150003 curs1 0x0200000087BB6E0438E3B0008A444CAAB718A02359B90474 declare curs1 cursor for select id from sysobjects open curs1
57 180150003 curs1 0x0200000087BB6E0438E3B0008A444CAAB718A02359B90474 declare curs1 cursor for select id from sysobjects open curs1

Имхо
Нумерация сквозная. Как раз для повторного использования

Ну судя по одинаковому cursor_id в разных сессиях - вы правы. Видимо это специальный механизм для повторного использования уже существующих курсоров в разных сессиях.
18 июн 13, 10:50    [14446327]     Ответить | Цитировать Сообщить модератору
 Re: sp_prepare/sp_cursorprepare/sp_prepexec  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Что интересно, даже если запускать с разных машин, то cursor_id полностью совпадает, при полном совпадении запущенного кода (как вы говорили выше, даже комментарий меняет sql_handle)
18 июн 13, 10:58    [14446393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить