Тестирование на наличие временной таблицы в среде multi tempdb? - PullRequest
0 голосов
/ 10 октября 2008

Есть ли способ определить, была ли создана конкретная временная таблица в сеансе, не ссылаясь на базу данных tempdb, на которой она была создана? Пользователи назначаются определенной базе данных tempdb при входе в систему, поэтому я не знаю, какую базу данных tempdb они будут использовать.

Мне не нужно указывать базу данных tempdb для выбора данных из временной таблицы, так что я точно вижу, существует ли таблица?

Ответы [ 2 ]

5 голосов
/ 10 декабря 2008

Вы можете проверить наличие временного объекта, используя object_id:

SELECT object_id('#tmpTable')

Вы можете указать, какую временную базу данных вы используете, если хотите, но вам не нужно:

SELECT object_id('tempdb..#tmpTable')

Стоит отметить, что это также работает и для глобальных временных таблиц:

SELECT object_id('##tmpTable')

Чтобы сделать сценарии повторно запускаемыми без необходимости выполнять DROP TABLE в конце, я всегда выполняю проверку и удаление перед созданием временной таблицы. Я часто оставляю таблицы, созданные при разработке кода SQL.

IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
    id int,
    col1 varchar(100)
)
0 голосов
/ 10 октября 2008

Мне кажется, что здесь не следует использовать временные таблицы ... они больше похожи на обычные таблицы (возможно, с идентификатором пользователя). Какой здесь сценарий?

Обратите внимание, что использование временных таблиц таким способом может привести к хаосу в кеше оптимизатора / запроса - ему придется выполнять много перекомпиляций, так как значение #FOO меняется в значительной степени за вызов.

...