IF Exists 似乎不适用于 Table Drop if already exists

IF Exists doesn't seem to work for a Table Drop if already exists

每次尝试执行 DROP Table 时都会收到此错误

第 1 步:创建 Table

CREATE TABLE Work_Tables.dbo.Drop_Table_Test (RowID INT IDENTITY(1,1), Data VARCHAR(50))

INSERT INTO Work_Tables.dbo.Drop_Table_Test 
SELECT 'Test' UNION
SELECT 'Test1' UNION
SELECT 'Test2' UNION
SELECT 'Test3'

第 2 步:编写一个 IF Exists 块来检查 Table 是否存在。

IF EXISTS (SELECT 1 FROM Work_Tables.dbo.SysObjects WHERE NAME LIKE  'Drop_Table_Test' AND XType = 'U')
BEGIN
 PRINT 'IN'
 DROP TABLE Work_Tables.dbo.Drop_Table_Test
END

CREATE TABLE Work_Tables.dbo.Drop_Table_Test (RowID INT IDENTITY(1,1), Data VARCHAR(50), NAME VARCHAR(20), PreCheck INT)


INSERT INTO Work_Tables.dbo.Drop_Table_Test (Data, Name, PreCheck)
SELECT 'Test','SRK',1 UNION
SELECT 'Test1','Daya',2 UNION
SELECT 'Test2','Dinesh',3 UNION
SELECT 'Test3','Suresh',4

在 运行 上,第 2 步代码很明显必须删除 Table 并使用相同的名称重新创建,但它甚至没有进入 Begin End 块。

我觉得这是因为在第二次尝试中添加了更多的列,但仍然不清楚为什么它会出现问题,因为我们要删除 table。

你可以尝试使用这个语法:

IF OBJECT_ID('dbo.Drop_Table_Test', 'U') IS NOT NULL 
  DROP TABLE dbo.Drop_Table_Test; 

IF EXISTS 仅当您的 table Drop_Table_Test 不包含任何行时才会删除 table。如果它包含数据,则它不会删除 table.

您不能在 SQL 服务器 .

的同一批次中删除和创建相同的 table

将您的代码分成单独的批次,这样 table 就可以在您尝试重新创建它之前删除。在 BEGIN / END 语句中的 END 之后添加 GO

IF EXISTS (SELECT 1 FROM Work_Tables.dbo.SysObjects WHERE NAME LIKE  'Drop_Table_Test' AND XType = 'U')
BEGIN
 PRINT 'IN'
 DROP TABLE Work_Tables.dbo.Drop_Table_Test
END
GO   --Add this...
....

直接来自Microsoft's Documentation

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.