我的表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;
这只是为什么您应该在创建所有约束时提供特定名称的另一个好理由!