gpt4 book ai didi

tsql - 如果已经存在,IF Exists 似乎不适用于 Table Drop

转载 作者:行者123 更新时间:2023-12-01 14:20:29 26 4
gpt4 key购买 nike

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

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

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

最佳答案

在 SQL Server 中不能在同一个批处理中删除和创建同一个表 .

将您的代码分成不同的批次,以便在您尝试重新创建表之前删除该表。添加 GOEND在您的 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 and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.

关于tsql - 如果已经存在,IF Exists 似乎不适用于 Table Drop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com