我试图在信息中删除目标表上的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。
答案 0 :(得分:6)
可能的原因是您的数据库上可能有多个名为xyz
的索引。您的IF EXISTS
SELECT
声明没有考虑哪个表格xyz
。
您可以通过单独运行select语句来自行检查此条件。
尝试将查询更改为以下内容以限制范围:
If Exists
(
Select *
From sys.indexes
Where name = 'xyz'
And Object_Id = Object_Id('dbo.Table_Name')
)
Drop Index xyz On dbo.Table_Name;
答案 1 :(得分:0)
解决此问题的一种方法是欺骗解析器:
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE SCHEMA_NAME = 'dbo' AND TABLE_NAME = 'Table_Name' AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME = 'xyz')
BEGIN
EXEC('ALTER TABLE [dbo].[Table_Name] DROP CONSTRAINT [xyz]')
END