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.
每次尝试执行 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.