#tsql #sybase #temp-tables
Вопрос:
Существует ли какой-либо способ определить, была ли создана определенная временная таблица в сеансе без ссылки на базу данных tempdb, в которой она была создана? Пользователи выделяются для определенной базы данных temp при входе в систему, поэтому я не знаю, какую базу данных temp они будут использовать.
Мне не нужно указывать базу данных tempdb, чтобы выбрать данные из временной таблицы, поэтому, конечно, я могу видеть, существует ли таблица?
Ответ №1:
Вы можете проверить наличие временного объекта, используя object_id:
SELECT object_id('#tmpTable')
Вы можете указать, какую базу данных tempdb вы используете, если хотите, но вам это не нужно:
SELECT object_id('tempdb..#tmpTable')
Стоит отметить, что это также работает и для глобальных временных таблиц:
SELECT object_id('##tmpTable')
Чтобы сценарии можно было запускать повторно без необходимости в конце удалять ТАБЛИЦУ, я всегда проверяю и удаляю, прежде чем создавать временную таблицу. Я часто оставляю таблицы, созданные при разработке SQL-кода.
IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
id int,
col1 varchar(100)
)
Ответ №2:
Мне кажется, что вам не следует использовать здесь временные таблицы… они больше похожи на обычные таблицы (возможно, с идентификатором пользователя). Каков здесь сценарий?
Обратите внимание, что использование временных таблиц таким образом может привести к разрушению кэша оптимизатора/запроса — ему придется выполнять множество перекомпиляций, так как значение #FOO довольно сильно меняется за один вызов.
Комментарии:
1. это сложный сценарий для объяснения, все это устаревшие приложения и сумасшедшие требования (вкл. не используя обычные таблицы). В принципе, мне нужно приложение для создания временной таблицы (с помощью execute immediate), а затем использовать хранимую процедуру для ее заполнения. Затем попросите приложение прочитать из таблицы. wtf.
2. В таком случае лучшее, что я могу предложить, — это попробовать ВЫБРАТЬ из таблицы и посмотреть, не вырвет ли ее! Извините…
3. спасибо, это то, чем я сейчас занимаюсь, но это кажется немного неэлегантным.