Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];

Вниз

SQL временные таблички   Найти похожие ветки 

 
voland_s   (2002-06-10 15:14) [0]

У меня такая проблема я пытаюсь создать временную табличку #tmp
если я все делаю в Sql Analayzer то все нормально я могу обращаться к ней, но если я все делаю из Делфи то просто не могу к ней обратиться, я догадываюсь что просто все проходит в разных сессиях, не знаю как сделать все в одной сессии


 
Delirium   (2002-06-10 15:17) [1]

Все ADOQuery должны работать с одним и тем-же ADOConnection - одна сессия :)


 
voland_s   (2002-06-10 15:54) [2]

Я делаю такой запрос
CREATE TABLE ##Tmp (
[LID] [int] NOT NULL ,
[RID] [int] NOT NULL ,
) ON [PRIMARY]


затем когда я пытаюсь открыть Select * from #tmp
он говорит что такой таблицы нет


 
TSV   (2002-06-10 16:09) [3]

1. Почему в CREATE 2 знака #?
2. Обычно временные таблицы используют в хранимых процедурах...


 
Voland_s   (2002-06-10 16:10) [4]

Извените ошибка всюду один #


 
Delirium   (2002-06-10 16:33) [5]

С двумя значками # - это глобальные временные таблицы, они доступны в разных сессиях и разным пользователям, и существуют до тех пор, пока к ним кто-нибудь обращается.


 
Voland_s   (2002-06-11 11:18) [6]

Мне просто нужны именно локальные временные таблицы, чтобы у каждого пользователя были свои


 
wicked   (2002-06-11 13:17) [7]

ну так сразу после подключения и создавай их...
для TADOConnection.AfterConnect повесь обработчик вида:

begin
MyConnection.Execute(" create table #tmp (lid int not null, rid int not null)");
end;


 
Voland_s   (2002-06-11 14:03) [8]

Я создаю их прямо перед обращением причем такая ситуация некоторыми запросами я вижу эту табличку а некоторыми нет
такое ощущение что часть запросов запускается в одной сесии, а часть в другой. HELP!!!!!!
Работаю я не через ADO, а через SQLQuery


 
MishGan`   (2002-06-11 15:03) [9]

Такая фича возникает на ADO при использовании серверных курсоров. Поменяй везде тип курсора на клиентский и все заработает. Если ты работаешь не через ADO, то не знаю, что тебе делать. Но где копать - я подсказал. Думаю, что сессии действительно плодятся. И еще - поанализируй sysprocesses, как там изменяется число сессий. Еще можешь попробовать создать какую нибудь тестовую табличку с одним полем типа INT и пиши в нее перед выполнением каждого запроса значение @@SPID.


 
MishGan`   (2002-06-11 15:13) [10]

Вообще создание дополнительной сессии происходит тогда, когда ты пытаешься фетчить более чем из одного набора данных. Таким образом (т.е. созданием доп. сессии) обходится ограничение протокола TDS, который позволяет держать открытым только один набор данных. Поэтому ты и не видишь локальную временную таблицу, потому что она фактически находится в другой сессии.



 
Voland_s   (2002-06-11 15:24) [11]

Дело в том что я же могу всетаки открыть ее и причем используя ее в качестве подзапроса. Есть ли какой нибудь способ указывать запросу в какой сессии ему запускаться ???


 
MishGan`   (2002-06-11 15:52) [12]

>>Есть ли какой нибудь способ указывать запросу в какой сессии ему запускаться ???
Только на клиенте при создании TxxxQuery можно указать к какой сессии (т.е. экземпляру класса TxxxConnection или TxxxDatabase) он относится. Но у меня было то, что ADO сам неявно плодил сессии, чем доставил мне немало геморроя.
>>Дело в том что я же могу всетаки открыть ее и причем используя >>ее в качестве подзапроса.
Очень странно.
Если чего-то прояснится то расскажи в чем было дело.


 
MishGan`   (2002-06-11 16:20) [13]

А ты не хочешь для этих целей завести постоянную таблицу, которая будет юзаться всеми пользователями. Чтобы каждый пользователь мог отличить свои данные, добавь в эту таблицу поля SPID и LOGON_DATETIME. Тем самым ты можешь избавить себя от некоторой головной боли с локальными временными таблицами.
Ну это я так, тебе-то видней.


 
BJValentine   (2002-06-11 16:44) [14]

Создай и открой эту таблицу одним запросом или работай с этой таблицей посредством этого же компонента в котором она была создана. У меня был такой же попандос, хотя я и использую не ADO, а другие, более мощные компоненты. Условие: до окончания работы с этой таблицей не вызывай метода Close; Делай всё посредством ExecSql. А в конце, если тебе надо вывести результат на экран, можешь открыть её. После закрытия этого запроса эта таблица ищезнет, но это уже будет не важно.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
3-9699
oss
2002-06-10 12:21
2002.07.04
midas


3-9693
PTE
2002-06-10 10:24
2002.07.04
вычисляемый столбец


3-9698
yozhik
2002-06-08 17:08
2002.07.04
Запрет доступа


14-9994
kaif
2002-06-04 02:55
2002.07.04
Word -> PDF


4-10055
keymaster
2002-05-01 15:52
2002.07.04
Tray icon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский