if not object_id('Tempdb..#T') is null drop table #T??

时间:2022-01-05 20:55:13
if not object_id('Tempdb..#T') is null
drop table #T
这句话什么意思呢?好像我经常看到这类的语句,看那个object_id是否存在,要不就删掉这个TABLE,写这句命令是为了什么呢?什么时候才要写这命令的呢?我是不是很菜,呵

13 个解决方案

#1


判断语句.
如果 tempdb数据库中的#T临时表存在的话,则删除它.

删除它的目的是后面想要生成这个临时表,如果原先有,就生成不了了.

#2


如果临时表#T 存在,就删除.

#3


object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句

#4


返回架构范围内对象的数据库对象标识号。

重要提示: 
使用 OBJECT_ID 不能查询非架构范围内的对象(如 DDL 触发器)。对于在 sys.objects 目录视图中找不到的对象,需要通过查询适当的目录视图来获取该对象的标识号。例如,若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'。
 


 Transact-SQL 语法约定

语法
 
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] 
    object_name' [ ,'object_type' ] )
 

参数
' object_name '
要使用的对象。object_name 的数据类型为 varchar 或 nvarchar。如果 object_name 的数据类型为 varchar,则它将隐式转换为 nvarchar。可以选择是否指定数据库和架构名称。

' object_type '
架构范围的对象类型。object_type 的数据类型为 varchar 或 nvarchar。如果 object_type 的数据类型为 varchar,则它将隐式转换为 nvarchar。有关对象类型的列表,请参阅 sys.objects (Transact-SQL) 中的 type 列。

返回类型
int 

异常
对于空间索引,OBJECT_ID 返回 NULL。

出现错误时,返回 NULL。

用户只能查看其拥有的安全对象的元数据,或者已对其授予权限的安全对象的元数据。也就是说,如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_ID)可能返回 NULL。有关详细信息,请参阅元数据可见性配置和元数据可见性故障排除。

注释
当该参数对系统函数可选时,则采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟括号。

当指定临时表名时,除非当前数据库为 tempdb,否则必须在该临时表名之前加上数据库名称。例如:SELECT OBJECT_ID('tempdb..#mytemptable')。

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关详细信息,请参阅表达式(Transact-SQL)和 WHERE (Transact-SQL)。

#5


引用 3 楼 beirut 的回复:
object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句


if not object_id('Tempdb..#T') is null drop table #T??

#6


其实它的作用就是存在这个表的话就删除。

#7


只有在以下情况下需要用:
我要在数据库中建立一个表,但又不确定该数据库中是否存在该表,则判断如果存在该表,则删除。
因为如果不删除这个同名的表,则新建同名表则会报错不允许创建

#8


就像7楼说的,如果不加这个判断,那么在数据库已经存在同名临时表的情况下,你就不能创建新的临时表了。

#9


object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句

#10


引用楼主 qq576420473 的回复:
if not object_id('Tempdb..#T') is null
drop table #T
这句话什么意思呢?好像我经常看到这类的语句,看那个object_id是否存在,要不就删掉这个TABLE,写这句命令是为了什么呢?什么时候才要写这命令的呢?我是不是很菜,呵
OBJECT_ID
返回数据库对象标识号。

语法
OBJECT_ID ( 'object' )

参数
'object'

要使用的对象。object 的数据类型为 char 或 nchar。如果 object 的数据类型是 char,那么隐性将其转换成 nchar。

返回类型
int

注释
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。

如果指定一个临时表名,则必须在临时表名前面加上数据库名,例如:

SELECT OBJECT_ID('tempdb..#mytemptable')

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关更多信息,请参见表达式和 WHERE。 

示例
下面的示例为 pubs 数据库中的 authors 表返回对象 ID。

USE master
SELECT OBJECT_ID('pubs..authors')

下面是结果集:

----------- 
1977058079   

(1 row(s) affected)

#11


if not object_id('Tempdb..#T') is null
drop table #T

可不可以写成
if object_id('Tempdb..#T')  not is null
drop table #T

#12


這是判斷對象是否存在

object_id('對象名','U')--比如這樣加"U"是用戶表,加'P'為存儲過程

object_id是把對象名編譯為ID--這是一對一方法

object_name(object_id)--是把ID轉為Name

#13


感谢各位,以后要多学习系统函数

#1


判断语句.
如果 tempdb数据库中的#T临时表存在的话,则删除它.

删除它的目的是后面想要生成这个临时表,如果原先有,就生成不了了.

#2


如果临时表#T 存在,就删除.

#3


object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句

#4


返回架构范围内对象的数据库对象标识号。

重要提示: 
使用 OBJECT_ID 不能查询非架构范围内的对象(如 DDL 触发器)。对于在 sys.objects 目录视图中找不到的对象,需要通过查询适当的目录视图来获取该对象的标识号。例如,若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'。
 


 Transact-SQL 语法约定

语法
 
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] 
    object_name' [ ,'object_type' ] )
 

参数
' object_name '
要使用的对象。object_name 的数据类型为 varchar 或 nvarchar。如果 object_name 的数据类型为 varchar,则它将隐式转换为 nvarchar。可以选择是否指定数据库和架构名称。

' object_type '
架构范围的对象类型。object_type 的数据类型为 varchar 或 nvarchar。如果 object_type 的数据类型为 varchar,则它将隐式转换为 nvarchar。有关对象类型的列表,请参阅 sys.objects (Transact-SQL) 中的 type 列。

返回类型
int 

异常
对于空间索引,OBJECT_ID 返回 NULL。

出现错误时,返回 NULL。

用户只能查看其拥有的安全对象的元数据,或者已对其授予权限的安全对象的元数据。也就是说,如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_ID)可能返回 NULL。有关详细信息,请参阅元数据可见性配置和元数据可见性故障排除。

注释
当该参数对系统函数可选时,则采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟括号。

当指定临时表名时,除非当前数据库为 tempdb,否则必须在该临时表名之前加上数据库名称。例如:SELECT OBJECT_ID('tempdb..#mytemptable')。

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关详细信息,请参阅表达式(Transact-SQL)和 WHERE (Transact-SQL)。

#5


引用 3 楼 beirut 的回复:
object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句


if not object_id('Tempdb..#T') is null drop table #T??

#6


其实它的作用就是存在这个表的话就删除。

#7


只有在以下情况下需要用:
我要在数据库中建立一个表,但又不确定该数据库中是否存在该表,则判断如果存在该表,则删除。
因为如果不删除这个同名的表,则新建同名表则会报错不允许创建

#8


就像7楼说的,如果不加这个判断,那么在数据库已经存在同名临时表的情况下,你就不能创建新的临时表了。

#9


object_id 是一个系统函数 返回架构范围内对象的数据库对象标识号。

那一句就是 如果函数object_id 返回的结果 不为 null 就执行下面的语句

#10


引用楼主 qq576420473 的回复:
if not object_id('Tempdb..#T') is null
drop table #T
这句话什么意思呢?好像我经常看到这类的语句,看那个object_id是否存在,要不就删掉这个TABLE,写这句命令是为了什么呢?什么时候才要写这命令的呢?我是不是很菜,呵
OBJECT_ID
返回数据库对象标识号。

语法
OBJECT_ID ( 'object' )

参数
'object'

要使用的对象。object 的数据类型为 char 或 nchar。如果 object 的数据类型是 char,那么隐性将其转换成 nchar。

返回类型
int

注释
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。

如果指定一个临时表名,则必须在临时表名前面加上数据库名,例如:

SELECT OBJECT_ID('tempdb..#mytemptable')

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关更多信息,请参见表达式和 WHERE。 

示例
下面的示例为 pubs 数据库中的 authors 表返回对象 ID。

USE master
SELECT OBJECT_ID('pubs..authors')

下面是结果集:

----------- 
1977058079   

(1 row(s) affected)

#11


if not object_id('Tempdb..#T') is null
drop table #T

可不可以写成
if object_id('Tempdb..#T')  not is null
drop table #T

#12


這是判斷對象是否存在

object_id('對象名','U')--比如這樣加"U"是用戶表,加'P'為存儲過程

object_id是把對象名編譯為ID--這是一對一方法

object_name(object_id)--是把ID轉為Name

#13


感谢各位,以后要多学习系统函数