每次尝试执行DROP表时都会出现此错误
第1步:创建表
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块以检查表是否存在。
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
在运行Step 2 Code时,显然必须删除Table并使用相同的名称重新创建,但它甚至不能进入Begin End块。
我觉得它因为在第二次尝试中添加了更少的列,但仍然不清楚为什么它应该有问题,因为我们要DROP表。
答案 0 :(得分:1)
您不能在SQL Server中的同一批次中删除并创建相同的表。
将代码分成不同的批次,以便在尝试重新创建表之前删除该表。在GO
声明中END
之后添加BEGIN / END
。
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和CREATE TABLE。否则可能会发生意外错误。
答案 1 :(得分:0)
您可以尝试使用以下语法:
getActivity().finish();
System.exit(0);
仅当您的表IF OBJECT_ID('dbo.Drop_Table_Test', 'U') IS NOT NULL
DROP TABLE dbo.Drop_Table_Test;
不包含任何行时, IF EXISTS
才会删除该表。如果它包含数据,那么它不会丢弃表。