Форум: "Базы";
Текущий архив: 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