现在我使用的是:
IF (object_id('table', 'U') is not null)
AND (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))
RETURN;
检查我的数据库中是否已存在此“表”,但如果当前数据库中没有此类表,则在运行脚本时会收到下一条错误消息:
Msg 208,Level 16,State 1,Line 5
无效的对象名称'table'。
这是检查数据库中是否存在表的正确方法吗?或者可能是我必须更改SQL Management Studio的任何设置?
答案:我改变了我的剧本,一切运作良好:
IF (object_id('table', 'U') is not null)
IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))
RETURN;
答案 0 :(得分:2)
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'table')
AND type in (N'U'))
我遇到类似的问题,发现这样做有助于查询。 N
表示unicode
答案 1 :(得分:1)
if (object_id('tablex', 'U') is not null)
begin
select * from tablex
end
适合我。如果该表不存在,那么应该推迟该语句的编译(假设您使用的是SQL Server 2005 +)。
如果您在if
后面的语句之外的任何内容中引用该表,则需要使用begin...end
。
您需要使用
IF (object_id('table', 'U') is not null)
IF (NOT EXISTS (SELECT * FROM [table] WHERE id = 0))
RETURN;
您现有的声明无法按原样编译。整个语句被编译,所有对象必须在那一点存在,即使先前已经推迟了语句的编译。
另外,SQL Server is not guaranteed to do short circuit evaluation无论如何。
答案 2 :(得分:1)
这可能对您更有效
if (object_id('table', 'U') is not null)
if not exists (SELECT * FROM [table] WHERE id = 0)
答案 3 :(得分:0)
你可以这样做:
IF (EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='QRTZ_JOB_DETAILS'))
BEGIN
PRINT 'EXISTS'
END
其中TABLE_NAME是您要在数据库中检查的表的名称。
更新:
如果您使用的是SQL SERVER 2000+,则msarchet的答案更合适。
答案 4 :(得分:0)
这是众多方法之一。
IF EXISTS (SELECT 1
FROM sysobjects
WHERE xtype='u' AND name='tablename')
SELECT 'tablename exists.'
ELSE
SELECT 'tablename does not exist.'
答案 5 :(得分:0)
我认为您将表名提供给[表],如果是,请尝试将其更改为其他内容。那我觉得它会很好用。那么上述所有答案都可以正常使用。