Форум: "Базы";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Вниз
Как узнать существует ли временная таблица (в MSSQLServer)? Найти похожие ветки
← →
alxx (2002-11-29 15:55) [0]Не хочется переключаться: use tempdb...
← →
Владислав (2002-11-29 17:11) [1]В свое время не нашли хорошего решения (хотя может оно и существует), поэтому просто удаляли их - DROP TABLE #temp_table_name в ADOQuery и перехватывали ошибки.
← →
alxx (2002-11-29 17:17) [2]Я обрабатываю Exception в ADOQuery, но хотелось бы чтобы Delphi не парила мозги каждый раз своими Break-ами. Сидеть с выключенным Break on Exception тоже не хочется (по некоторым причинам). Просто хотелось сделать правильно...
Ну да ладно. Пока так сойдет.
← →
sniknik (2002-11-29 17:39) [3]alxx © (29.11.02 15:55)
>Не хочется переключаться: use tempdb...
не переключайся прямо и делай запрос
select * from tempdb..sysobjects WHERE ....
← →
Владислав (2002-11-29 17:45) [4]Не прокатит.
← →
alxx (2002-11-29 17:50) [5]Спасибо! То что нужно. Я просто забыл как к другой БД запрос делать..
← →
alxx (2002-11-29 17:51) [6]Прокатило:
IF not exists (select * from tempdb..sysobjects where id = object_id(N"tempdb..[#TS]") )
BEGIN
CREATE TABLE [dbo].#TS (
KodTv [int] NOT NULL,
Mest [real] NOT NULL,
Kolich [real] NOT NULL,
)
END ELSE DELETE FROM #TS
← →
asmith (2002-11-29 17:52) [7]Прокатит, если искать по первым N символам имени таблицы, где N - длина имени при создании (сервер в sysobjects внесет измененное имя); если ее имя, например, #result (длина 7), то ищем так:
select * from tempdb..sysobjects where SUBSTRING(name, 1, 7) = "#result"
← →
sniknik (2002-11-29 17:59) [8]да не прокатит, только она переключится неявным образом и при следуюшем создании временной таблици ранние удалит. :(
но выборку в некоторых случаях можно сделать, только по имени я так и не смог обратится только WHERE Name LIKE "#TableName%"
← →
sniknik (2002-11-29 18:02) [9]alxx © (29.11.02 17:51)
хм.. а так у меня неполучалось...??? почему?
← →
Владислав (2002-11-29 18:20) [10]> alxx © (29.11.02 17:51)
Классно! Спасибо за решение!
> asmith (29.11.02 17:52)
Это не вариант, к сожалению. Несколько пользователей могут запустить одно приложение, в котором используется временная таблица. В результате в sysobjects можно будет найти записи по предлагаемому условию, но это не означает, что таблица создана.
← →
sniknik (2002-11-29 18:34) [11]Владислав © (29.11.02 18:20)
попробуй вызвать блок от alxx © (29.11.02 17:51)
2 раза подряд, у меня он пытается еще раз создать ту же таблицу, т.е. не находит.
← →
Владислав (2002-11-29 18:39) [12]Я не вызываю этот блок. В нем явный глюк. Таблица не удаляется, а удаляются записи из нее, а потом опять создается таблица.
Я этим пользуюсь (например):
IF EXISTS(SELECT id FROM tempdb..sysobjects WHERE id = object_id(N"tempdb..#MY_TEMP_TABLE"))
DROP TABLE #MY_TEMP_TABLE
RETURN
CREATE TABLE #MY_TEMP_TABLE
(
ID INT
)
Проблема была в том, что я не знал этой конструкции: object_id(N"tempdb..#MY_TEMP_TABLE"). Поэтому и не мог определить, существует временная таблица, или нет.
← →
sniknik (2002-11-29 19:02) [13]ну ктото знает одно ктото другое, я то например знал эту "конструкцию" но не получалось все одно (но в общем то и не очень нужно было, вернее совсем не нужно но пытался).
а у тебя да правильно работает. как понадобится уже есть готовое решение.
← →
Владислав (2002-11-29 19:13) [14]Ага :)
Так что еще раз спасибо!
← →
Владислав (2002-11-29 19:14) [15]Кстати, я тут эксперементировал, так что правильно так:
IF EXISTS(SELECT id FROM tempdb..sysobjects WHERE id = object_id(N"tempdb..#MY_TEMP_TABLE"))
DROP TABLE #MY_TEMP_TABLE
CREATE TABLE #MY_TEMP_TABLE
(
ID INT
)
А первый вариант - последствие экспериментов :)
← →
Delirium (2002-11-29 19:23) [16]Ну и по написали :)
if Object_ID("tempdb..#test") is not null
print "Есть временная таблица #test !"
← →
Владислав (2002-11-30 10:24) [17]> Delirium © (29.11.02 19:23)
Класс! Спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c