我有一个DTS包,它会删除一个表,然后创建它并填充它,但有时会发生一些事情,并且包在drop table之后失败。如果它重新运行则失败,因为尚未创建表。
对于像MySQL这样的SQLServer 2000,是否存在类似“if exists”的内容?
感谢。
答案 0 :(得分:33)
或更快:
IF OBJECT_ID('temp_ARCHIVE_RECORD_COUNTS') IS NOT NULL
DROP TABLE temp_ARCHIVE_RECORD_COUNTS
答案 1 :(得分:10)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
DROP TABLE TableName;
GO
如果要检查数据库中是否存在其他对象,可以检查list of type definitions in the sys.objects table here。
答案 2 :(得分:8)
还没有人提到过这种方法:
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='MyTable')
begin
drop table MyTable
end
这是最便携的方法 - 它至少可以在MSSQL2000上运行到MSSQL2008。
INFORMATION_SCHEMA表是SQL-92标准的一部分。
答案 3 :(得分:3)
不确定
IF OBJECT_ID('YOURTABLENAME') IS NOT NULL
其中YOURTABLENAME
是表的名称。
如果是临时表,则只需在tempdb.#
函数调用之前添加OBJECT_ID
。
答案 4 :(得分:3)
当您删除对象然后添加回数据库时要记住的一件事是将任何权限添加回表中。这让我们多次绊倒了。
我投了TracyNixon的答案。我想说你想远离直接查询sysobjects表,因为Microsoft更新可能会破坏这种代码。您可以使用OBJECT_ID函数将自己与之隔离开来。
答案 5 :(得分:1)
您需要查看sysobjects表
答案 6 :(得分:1)
以下作品,只需将TABLENAME替换为您的表格
即可IF EXISTS( SELECT * FROM dbo.sysobjects where id = object_id(N'TABLENAME') AND OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
DROP TABLE TABLENAME
END