我希望这是关于如何使用 SQL 语句检查 SQL Server 2000/2005 中是否存在表的最终讨论。
当谷歌找到答案时,你会得到很多不同的答案。这样做是否有正式 / 后向和前向兼容的方式?
这有两种可行的方法。这两者中哪一个是标准 / 最佳方式?
第一种方式:
IF EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='mytablename')
SELECT 1 AS res ELSE SELECT 0 AS res;
第二种方式:
IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL
SELECT 1 AS res ELSE SELECT 0 AS res;
MySQL提供简单
SHOW TABLES LIKE '%tablename%';
声明。我正在寻找类似的东西。
对于这样的查询,最好使用INFORMATION_SCHEMA
视图。这些视图(大多数)是许多不同数据库的标准视图,很少从版本更改为版本。
要检查表是否存在,请使用:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TheSchema'
AND TABLE_NAME = 'TheTable'))
BEGIN
--Do Stuff
END
另请注意,如果出于任何原因需要检查临时表,您可以执行以下操作:
if OBJECT_ID('tempdb..#test') is not null
--- temp table exists
只要我记得,我们总是使用OBJECT_ID
样式
IF OBJECT_ID('*objectName*', 'U') IS NOT NULL