我但愿这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 数据库
当您用Google搜索答案时,会获得不少不一样的答案。 有官方/向后和向前兼容的方式吗? 架构
这是两种可能的方法。 两种方法中的哪种是标准/最佳方法? 编辑器
第一种方式: spa
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;
第二种方式: code
IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res;
MySQL提供的简单 io
SHOW TABLES LIKE '%tablename%';
声明。 我正在寻找相似的东西。 table
考虑在一个数据库中您有一个表t1。 您想在其余数据库上运行脚本,例如-若是t1存在,则不执行其余任何操做来建立t1。 为此,请打开Visual Studio,而后执行如下操做: object
右键单击t1,而后单击“脚本表”,而后单击“ DROP”和“建立到”,而后单击“新建查询编辑器”。 搜索
您将找到所需的查询。 可是在执行该脚本以前,不要忘了在查询中注释掉drop语句,由于若是已有一个,则不想建立新的语句。 方法
谢谢
若是您须要在其余数据库上工做:
DECLARE @Catalog VARCHAR(255) SET @Catalog = 'MyDatabase' DECLARE @Schema VARCHAR(255) SET @Schema = 'dbo' DECLARE @Table VARCHAR(255) SET @Table = 'MyTable' IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = @Catalog AND TABLE_SCHEMA = @Schema AND TABLE_NAME = @Table)) BEGIN --do stuff END
使用信息架构是SQL标准的实现方式,所以,支持它的全部数据库都应使用它。
只要我记得咱们一直使用OBJECT_ID
样式
IF OBJECT_ID('*objectName*', 'U') IS NOT NULL
对于此类查询,最好始终使用INFORMATION_SCHEMA
视图。 这些视图(大多数状况下)是跨许多不一样数据库的标准视图,而且不多因版本而异。
要检查表是否存在,请使用:
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME = 'TheTable')) BEGIN --Do Stuff END