【发布时间】:2016-05-23 18:54:55
【问题描述】:
我正在尝试在 informatica 中删除目标表上的 pk 约束和删除索引,以下这些语句第一次成功运行。
IF EXISTS (SELECT Name FROM sysindexes WHERE Name = 'xyz')
DROP INDEX [xyz] ON [dbo].[Table_Name];
IF EXISTS (SELECT Name FROM sysindexes WHERE Name = 'xyz')
ALTER TABLE [dbo].[Table_Name] DROP CONSTRAINT [xyz];
但是如果我第二次运行相同的查询,它会给出一个错误:
无法删除索引“dbo.Table_Name.xyz”,因为它不存在或您没有权限
我需要一个 If ... Else 语句语法,例如 if exists drop else end 或success something。
【问题讨论】:
-
解析器看到你试图删除一个不存在的索引,但它不够聪明,无法遵循你的 IF 逻辑。使用动态 SQL (
IF EXISTS (...) EXEC sys.sp_executesql N'DROP INDEX ...';)。此外,使用sys.indexes而不是已弃用的sysindexes,并确保您确定索引属于该表(在另一个表上也可能有一个名为xyz的索引)。
标签: sql sql-server