Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Как узнать существует ли временная таблица (в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
14-61814
Burmistroff
2002-11-28 00:43
2002.12.19
ОСи


1-61597
nikolo
2002-12-10 12:16
2002.12.19
Как отобразить компонент после его создания?


1-61570
Xmen
2002-12-09 10:11
2002.12.19
String to Char


1-61625
Riperr
2002-12-07 08:59
2002.12.19
Metods


3-61486
Larisa
2002-12-01 23:37
2002.12.19
Подскажите, пожалуйста, как правильно написать SQL запрос.