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

Имею TADOConnection, MS SQL 2008

Пишу
Conn.Execute('select distinct clt_auto into #trt from #searchkeys');
Conn.Execute('delete from #searchkeys');
Conn.Execute('insert into #searchkeys select clt_auto from #trt');
Conn.Execute('drop table #trt');

В результате в #searchkeys остаются повторяющиеся значения. На постоянных таблицах все нормально.
Не знаю, в дельфи ли дело или в сервере
3 авг 12, 14:33    [12958756]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
смотришь из под
Guest
яфчы21,

а повторяющиеся значения смотришь из под management studio?
3 авг 12, 14:36    [12958777]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
смотришь из под,

из-под management studio не видно временных таблиц, созданных в другом коннекте.
3 авг 12, 14:39    [12958797]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

а профайлером если посмотреть?

Posted via ActualForum NNTP Server 1.5

3 авг 12, 14:47    [12958859]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
созданных в другом коннекте
Guest
яфчы21
смотришь из под,

из-под management studio не видно временных таблиц, созданных в другом коннекте.

о! внезапно.
а в другом батче?
3 авг 12, 14:50    [12958885]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
созданных в другом коннекте
яфчы21
смотришь из под,

из-под management studio не видно временных таблиц, созданных в другом коннекте.

о! внезапно.
а в другом батче?


Что у Вас внезапно?
3 авг 12, 14:58    [12958943]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
Что интересно,

просто
select distinct clt_auto from #searchkeys
, возвращает уникальные значения

"а профайлером если посмотреть?"

Уже обошел (некогда лезть в профайлер). Если кто-то знает причину проблемы, просьба отписаться
3 авг 12, 15:02    [12958989]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1523
яфчы21,

возможно ошибки вылезают, которые глушатся... может стоит попробовать одним вызовом все сделать с установкой SET NOCOUNT ON и SET XACT_ABORT ON
3 авг 12, 15:32    [12959210]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Я уже давно заметил, что один компонент TADOConnection вовсе не эквивалентен одной сессии на SQL сервере.
Вот если отправить скрипт одной строкой, то да, с временными таблицами будет порядок.
Conn.Execute
(
 'select distinct clt_auto into #trt from #searchkeys;'
+'delete from #searchkeys;'
+'insert into #searchkeys select clt_auto from #trt;'
+'drop table #trt;'
);
Правда, откуда взялась таблица #searchkeys, остаётся неясным...
3 авг 12, 15:43    [12959285]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
яфчы21
Уже обошел (некогда лезть в профайлер). Если кто-то знает причину проблемы, просьба отписаться
За вас потрейcить профайлером, что ли?
3 авг 12, 15:45    [12959300]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
Гавриленко Сергей Алексеевич
яфчы21
Уже обошел (некогда лезть в профайлер). Если кто-то знает причину проблемы, просьба отписаться
За вас потрейcить профайлером, что ли?


Ну потрейсите, если не впадлу
3 авг 12, 19:10    [12960491]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
яфчы21
Ну потрейсите, если не впадлу
А за пивком не сгонять?
3 авг 12, 19:11    [12960492]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
iap
Я уже давно заметил, что один компонент TADOConnection вовсе не эквивалентен одной сессии на SQL сервере.
Вот если отправить скрипт одной строкой, то да, с временными таблицами будет порядок.
Conn.Execute
(
 'select distinct clt_auto into #trt from #searchkeys;'
+'delete from #searchkeys;'
+'insert into #searchkeys select clt_auto from #trt;'
+'drop table #trt;'
);
Правда, откуда взялась таблица #searchkeys, остаётся неясным...


#searchkeys создается выше тем же ADOConnection (один раз). Если TADOConnection по какой-то причине создавал при прошлых запусках несколько сессий, то временная таблица, созданная в одной, не была бы видна в другой. Получил бы исключение без всякого профайлера. А так - код выполнился без ошибок.
Сейчас попробовал запустить тот же код с теми же данными - теперь все правильно. Но чудес же не бывает... Интересно, сам сервер не может так весело "глючить"?

Хотя, в целом, вопрос "проехан"
3 авг 12, 19:15    [12960502]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
яфчы21
iap
Я уже давно заметил, что один компонент TADOConnection вовсе не эквивалентен одной сессии на SQL сервере.
Вот если отправить скрипт одной строкой, то да, с временными таблицами будет порядок.
Conn.Execute
(
 'select distinct clt_auto into #trt from #searchkeys;'
+'delete from #searchkeys;'
+'insert into #searchkeys select clt_auto from #trt;'
+'drop table #trt;'
);
Правда, откуда взялась таблица #searchkeys, остаётся неясным...


#searchkeys создается выше тем же ADOConnection (один раз). Если TADOConnection по какой-то причине создавал при прошлых запусках несколько сессий, то временная таблица, созданная в одной, не была бы видна в другой. Получил бы исключение без всякого профайлера. А так - код выполнился без ошибок.
Сейчас попробовал запустить тот же код с теми же данными - теперь все правильно. Но чудес же не бывает... Интересно, сам сервер не может так весело "глючить"?

Хотя, в целом, вопрос "проехан"
Connection pooling? Не, не слышал.
3 авг 12, 19:18    [12960510]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы21
Guest
яфчы21
Что интересно,

просто
select distinct clt_auto from #searchkeys
, возвращает уникальные значения

"а профайлером если посмотреть?"

Уже обошел (некогда лезть в профайлер). Если кто-то знает причину проблемы, просьба отписаться


смотрите:
select distinct clt_auto from #searchkeys


возвращал уникальные значения, а

select distinct clt_auto into #trt from #searchkeys


заполнял создаваемую #trt неуникальными.

Может быть, есть какие-то особенности в select into, которые могли приводить к такому поведению сервера, и которых я не знаю?
3 авг 12, 19:19    [12960514]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
яфчы
Guest
Гавриленко Сергей Алексеевич
яфчы21
пропущено...


#searchkeys создается выше тем же ADOConnection (один раз). Если TADOConnection по какой-то причине создавал при прошлых запусках несколько сессий, то временная таблица, созданная в одной, не была бы видна в другой. Получил бы исключение без всякого профайлера. А так - код выполнился без ошибок.
Сейчас попробовал запустить тот же код с теми же данными - теперь все правильно. Но чудес же не бывает... Интересно, сам сервер не может так весело "глючить"?

Хотя, в целом, вопрос "проехан"
Connection pooling? Не, не слышал.


Ну и зря интересная вещь.

Если же в посте содержался некий вопрос - то с соединением ровным счетом ничего не происходит, Active = true
при старте, и все. Программа работает по линейному алдгоритму 10-15 секунд
3 авг 12, 19:34    [12960549]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> Может быть, есть какие-то особенности в select into, которые могли приводить
> к такому поведению сервера, и которых я не знаю?

документированных - нет. это было бы багом.
но вместе с заявлением о баге нужно уже репро приводить - скрипт/программу, подробное
описание последовательности действий, которые воспроизводят проблему.
а когда даже доподлинно неизвестно, что на сервере выполняется (а без трассы
об этом можно только догадки строить) - это вообще ни о чем.

были ли баги, при которых distinct возвращал дубликаты? да, были.
но на более сложных запросах, когда есть где ошибиться с планом.
в данном случае - очень сильно сомневаюсь. скорее всего, причина в чем-то другом.
про то, что #trt заполнялась неуникальными значениями вы наверняка говорить
не можете - вы же не делали выборку непосредственно из нее?
про "Получил бы исключение без всякого профайлера" - это тоже все лирика.
может и не получили бы - осталась в сессии таблица #searchkeys от каких-то ваших экспериментов.
да мало ли что там быть могло.

без _хотя бы_ трассы, которая подтвердила бы, что все ваши запросы действительно выполнялись
на сервере в одной сессии и именно в таком порядке, серьезно тут говорить просто не о чем.

dixi.
3 авг 12, 21:23    [12960901]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
vlas
Member

Откуда: Москва
Сообщений: 112
Смотри Область видимости временных таблиц SQL SERVER
4 авг 12, 13:54    [12961926]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к временным таблицам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
vlas
Смотри Область видимости временных таблиц SQL SERVER
Не, это не имеет отношения к проблеме.
4 авг 12, 14:33    [12962036]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить