创建一个名为#test的表,并在tempdb中创建一个名为test的表,有什么区别?

时间:2010-07-18 18:00:59

标签: sql-server-2005 tsql

在SQL Server 2005(2008未测试)中,您无法创建像 #function_name 这样的临时函数,但您可以直接在<中创建一个名为 function_name 的函数强> tempdb的 即可。以这种方式创建的函数是临时函数吗? 名为 #table_name 的表与在 tempdb 中直接创建的相同命名表之间的区别是什么?

2 个答案:

答案 0 :(得分:4)

tempdb数据库中实际上没有将临时表(#test)称为#test。这是因为系统上的每个用户都可以创建一个名为#test的表。如果在tempdb数据库中创建临时对象(通过查看sys.all_objects目录视图找到)。就我而言,它被创建为“#test _______________________________________________________________________________________________________________ 000000000003”。如果在tempdb数据库中创建物理表,则称为test,并且一次只能使用一个用户来创建对象,如果多个用户将数据放入名为test的物理表中,那么他们将能够访问彼此的数据。当您拥有临时表时,用户只能访问自己的数据和他们自己的表。

答案 1 :(得分:3)

一个显而易见的区别是,当你的连接结束时它不会自动删除,但除此之外我发现在我的开发机器上快速测试一些我不想明确清理的东西非常有用。显然,在服务器重启后,tempdb会重新创建,因此如果你想要任何类型的持久性,不应该使用它。