Создайте таблицу с именем #test и создайте таблицу с именем test в базе данных tempdb. В чем разница? - PullRequest
3 голосов
/ 18 июля 2010

В SQL Server 2005 (2008 не тестировался) вы не можете создать временную функцию, такую ​​как # имя_функции , но вы можете создать функцию под именем имя_функции непосредственно в Tempdb .Создает ли функция таким образом временную функцию?В чем разница между таблицей с именем # table_name и таблицей с таким же именем, созданной непосредственно в tempdb ?

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

Временная таблица (#test) на самом деле не называется #test в базе данных tempdb. Это потому, что каждый пользователь в системе может создать таблицу с именем #test. Если вы создаете временный объект, то физический объект в базе данных tempdb (можно найти, посмотрев на представление каталога sys.all_objects). В моем случае это было создано как "#test _______________________________________________________________________________________________________________ 000000000003". Где, если вы создаете физическую таблицу в базе данных tempdb, она называется test, и только одно использование за раз может создать объект, и если несколько пользователей поместят данные в физическую таблицу, называемую test, тогда они смогут получить доступ к данным друг друга , Где, когда у вас есть временные таблицы, пользователи могут получить доступ только к своим собственным данным и к своей собственной таблице.

3 голосов
/ 18 июля 2010

Одно очевидное отличие состоит в том, что оно не будет автоматически отброшено, когда закончится ваше соединение, но помимо этого я считаю весьма полезным быстрое тестирование чего-либо на моей машине для разработки, которое я не хочу явно очищать. Очевидно, что база данных tempdb воссоздается после перезапуска сервера, поэтому его не следует использовать, если вы хотите какой-либо персистентности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...