在删除约束时使用一个查询的结果



我的表dependents只有一个外键,而且我不知道外键的名称,所以我想检索密钥的名称并将其删除。

这是我尝试过的,但没有用:

alter table dependents 
drop constraint 
select CONSTRAINT_NAME 
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
where TABLE_NAME = 'dependents' and constraint_name like 'FK%';

您不清楚您使用的是什么具体的RDBMS,但在SQL Server的情况下,您不能在ALTER TABLE命令中执行此SELECT,必须在调用ALTER TABLE之前执行。此外:您不能简单地用约束名称的变量来调用ALTER TABLE——您需要使用动态SQL——类似于以下内容:

DECLARE @FkConstraintName SYSNAME;
SELECT @FkConstraintName = CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_NAME = 'dependents'
AND constraint_type = 'FOREIGN KEY';
DECLARE @DropStmt NVARCHAR(MAX)
= N'ALTER TABLE dependents
DROP CONSTRAINT ' + @FkConstraintName;
EXEC sys.sp_executesql @DropStmt;

这只是为什么您应该在创建所有约束时提供特定名称的另一个好理由!

最新更新