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

Откуда:
Сообщений: 113
Есть клиентское приложение.
Оно подключается к серверу под одним пользователем и вызывает хранимую процедуру с разными параметрами. Внутри ХП создается локальная временная таблица

Есть вероятность, что в одно и тоже время будет создано два коннекта и соответственно два запроса к ХП.
Вопрос: одновременно будет существовать две временные таблицы с одинаковым именем ? или я не прав ?
И как сервер разберет к какой таблице нужно обращаться из какой ХП ? Или никак не разберет и этим нужно озадачиваться в программном коде ХП ?

А то вот эти две фразы меня запутали
https://msdn.microsoft.com/ru-ru/library/ms174979.aspx

автор
Однако если запрос обращается к временной таблице и одновременно существует две таблицы с одинаковым именем, не определено, к какой из таблиц будет направлен запрос"


автор
Если локальная временная таблица создается хранимой процедурой или приложением, которые одновременно могут выполняться несколькими пользователями, компонент Компонент Database Engine должен иметь возможность различать таблицы, созданные разными пользователями. Компонент Компонент Database Engine делает это путем внутреннего присоединения числового суффикса к имени каждой локальной временной таблицы. Полное имя временной таблицы, хранящееся в таблице sysobjects базы данных tempdb, состоит из имени таблицы, заданного инструкцией CREATE TABLE, и сформированного системой числового суффикса.


Т.е сервер различает разных пользователей. А одного пользователя при разных коннектах - нет ? Или все таки различает ?
4 авг 16, 09:22    [19496375]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
SunJun
Member

Откуда:
Сообщений: 135
временные таблицы работают в текущей сессии. Так что в вашем случае все будет работать
4 авг 16, 09:33    [19496423]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
iiyama
Member

Откуда:
Сообщений: 642
sahard, Вы же не новичек. Если есть неоднозначность понимания документации неужели не быстрее накидать тест
create procedure test_local_temp_table
as
begin
select getdate() as [dt], @@spid as [spid], suser_sname() as username
into #mytestlocaltmp
select * from #mytestlocaltmp

select * from tempdb.sys.tables where name like '#mytestlocaltmp%'

waitfor delay '00:00:10'
end


в 1 окне MSSMS
exec test_local_temp_table

в течении 10 сек во втором окне MSSMS
exec test_local_temp_table
4 авг 16, 09:49    [19496500]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Времянки привязаны к коннекту, а не к пользователю.
Два коннекта - две независимые времянки.
4 авг 16, 09:54    [19496530]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
sahard
Member

Откуда:
Сообщений: 113
iiyama
sahard, Вы же не новичек.


Вы мне сильно льстите :))
4 авг 16, 18:51    [19501349]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
sahard
Member

Откуда:
Сообщений: 113
LSV
Времянки привязаны к коннекту, а не к пользователю.
Два коннекта - две независимые времянки.


Да я тоже так думал.
Но мне не понятно, как в одном коннекте могут оказаться два разных пользователя ?
4 авг 16, 19:07    [19501414]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
sahard
LSV
Времянки привязаны к коннекту, а не к пользователю.
Два коннекта - две независимые времянки.


Да я тоже так думал.
Но мне не понятно, как в одном коннекте могут оказаться два разных пользователя ?
Зато в нескольких коннектах может оказаться один и тот же пользователь.
4 авг 16, 19:16    [19501459]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
sahard
Member

Откуда:
Сообщений: 113
iap
Зато в нескольких коннектах может оказаться один и тот же пользователь.


И при этом пользователь может видеть свои временные локальные таблицы в разных коннектах ?

честно говоря, вот эта цитата из ФАО по серверу наводит именно на эти мысли

MICROSOFT
Если локальная временная таблица создается хранимой процедурой или приложением, которые одновременно могут выполняться несколькими пользователями, компонент Компонент Database Engine должен иметь возможность различать таблицы, созданные разными пользователями. Компонент Компонент Database Engine делает это путем внутреннего присоединения числового суффикса к имени каждой локальной временной таблицы. Полное имя временной таблицы, хранящееся в таблице sysobjects базы данных tempdb, состоит из имени таблицы, заданного инструкцией CREATE TABLE, и сформированного системой числового суффикса.


Но старшие опытные товарищи уверяют, что это не так и я чего то не догоняю.
4 авг 16, 20:11    [19501640]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
sahard
Member

Откуда:
Сообщений: 113
iiyama
неужели не быстрее накидать тест

Мыслю понял, но сделаю чуть по другому. Спасибо ха наводку!
4 авг 16, 20:27    [19501698]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
sahard
И при этом пользователь может видеть свои временные локальные таблицы в разных коннектах ?
Нет
4 авг 16, 22:11    [19502086]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
alexeyvg,

я как-то смотрел по моему в tempdb
они возникают там с какими-то странными технологическими именами
и видны чуть не всем подряд (в этом не уверен, не проверял)
но если эту тему не хакать, а использовать как написано
то в том соединении где создал - там и используешь
и с другими соединениями оно не должно путаться
независимо от того какой там юзер
4 авг 16, 23:00    [19502239]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
leov
alexeyvg,
и видны чуть не всем подряд (в этом не уверен, не проверял)
Вы бы хоть раз поселектить их попробовали, может желание "хакать" и поубавилось бы.
4 авг 16, 23:09    [19502275]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
leov
они возникают там с какими-то странными технологическими именами
и видны чуть не всем подряд (в этом не уверен, не проверял)
А, видеть - это имеется в виду знать про их существование?
Тогда да, видны.
Но практическим целям применения сиквела это не мешает.
5 авг 16, 01:44    [19502923]     Ответить | Цитировать Сообщить модератору
 Re: Идентификация временных таблиц при одном ползователе  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
sahard,

автор
две временные таблицы с одинаковым именем


Две, но с разными для сервера. Для пользователя с одинаковыми.
5 авг 16, 11:33    [19504323]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить