Главная страница
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.015 c
4-61878
Damage
2002-11-07 00:08
2002.12.19
Есть ли StgOpenStorageEx в реализации WinAPI Delphi?


14-61760
TankMan
2002-11-20 13:30
2002.12.19
Люди, где достать nmdaytim.pas?


14-61762
-=CrazyFish=-
2002-11-27 17:21
2002.12.19
Немного истории


1-61635
mike-d
2002-12-06 20:44
2002.12.19
screen saver и мое приложение


14-61787
AL2002
2002-11-21 14:58
2002.12.19
---|Ветка была без названия|---