【发布时间】:2020-02-13 15:58:03
【问题描述】:
我正在使用以下内容来检查和创建表:
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'tempdb' AND TABLE_NAME LIKE '#tmp_items%')
CREATE TABLE #tmp_items
(
id INT IDENTITY(1,1),
inv_mast_uid INT DEFAULT NULL,
src_invoice BIT DEFAULT NULL,
src_invoice_date DATETIME DEFAULT NULL,
src_order BIT DEFAULT NULL,
src_order_date DATETIME DEFAULT NULL
)
ELSE
TRUNCATE TABLE #tmp_items
我收到以下错误:
数据库中已经有一个名为“#tmp_items”的对象。
如果它存在,它应该截断表......
当我查看INFORMATION_SCHEMA 时,我什么也没看到:
SELECT DISTINCT TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
返回:
ssb
UTIL
mbl
DataSync
dbo
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%tmp_items%'
什么都不返回。
这没有意义,我不知所措...我什至断开了与服务器的连接(应该清除了临时表)并重新连接,但仍然出现相同的错误。
我错过了什么吗?
【问题讨论】:
-
我记得在 SQL Server 中,
INFORMATION_SCHEMA只查看您当前的数据库,但临时表存储在临时数据库中。我认为OBJECT_ID()经常用于检查是否存在。 -
据我了解,INFORMATION_SCHEMA 是首选方式。是的,它看的是当前数据库,但是表schema是tempdb,在当前数据库下。
-
你能用这个看看反应是什么吗?使用 tempdb go select * from INFORMATION_SCHEMA.TABLES where TABLE_CATALOG = 'tempdb' and TABLE_NAME like '#tmp_items%' go
-
TABLE_SCHEMA 列与表属于哪个数据库无关。它是表所属的模式。并且它不应该用于检查模式,因为它并不总是正确的。 docs.microsoft.com/en-us/sql/relational-databases/… 对象的默认架构是 dbo。
标签: sql sql-server information-schema