IF存在似乎不适用于Table Drop(如果已经存在)

时间:2016-07-25 06:27:53

标签: tsql sql-server-2008-r2 ddl

每次尝试执行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块。 enter image description here

我觉得它因为在第二次尝试中添加了更少的列,但仍然不清楚为什么它应该有问题,因为我们要DROP表。

2 个答案:

答案 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才会删除该表。如果它包含数据,那么它不会丢弃表。