Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
1-61529
Эли
2002-12-09 13:53
2002.12.19
Командная строка


1-61541
Sergy
2002-12-09 15:17
2002.12.19
Как редактировать файлы связи с бд (*.udl)


14-61750
Anatoly Podgoretsky
2002-11-27 07:36
2002.12.19
Именинники 27 ноября


7-61837
nickolayLI
2002-10-16 14:00
2002.12.19
блокировка/и разблокировка мыши


6-61738
idz
2002-10-23 20:44
2002.12.19
Перехват сообщения по NetMessageBufferSend





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский