在sql的使用中我们常常会使用到临时表,#表示局部临时表,##表示全局临时表,因为他的方便、快捷让我们情不自已爱不释手。
但是今天我才注意到,其实创建一个临时表后,在数据库中临时表的name不是我们创建的那个。
例如:
CREATE TABLE #TB1
(
ProductEntityID VARCHAR(32)
)
那么他在sql中的name是#TB1________________________________________________________________________________________________________________000000000017
SQL会自动在我们创建的临时表的名称后加下划线及数字 用于区别是什么时候哪个链接中创建的,那么我们再写sql判断临时表是否存在的时候就不能这样写:
select name,* from tempdb.dbo.sysobjects where name='#tb1'
因为会找不到;也不能这样写select name,* from tempdb.dbo.sysobjects where name LIKE '%#tb1%'
因为你可能会把其他人的临时表误操作,风险是极大的。
正确的写法是:
select name,* from tempdb.dbo.sysobjects where id=object_id('tempdb..#TB1')
ok,找打了;
if ((select COUNT(*) from tempdb.dbo.sysobjects where id=object_id('tempdb..#TB1'))=0)
CREATE TABLE #TB1
(
ProductEntityID VARCHAR(32)
)