【发布时间】:2018-04-19 00:54:56
【问题描述】:
使用 SQL Server 2014,此查询似乎不起作用(即,不删除外键)
IF (OBJECT_ID('FK', 'F') IS NOT NULL)
BEGIN
ALTER TABLE my_table
DROP CONSTRAINT [FK]
END
但是这个可以
IF EXISTS(
SELECT *
FROM sys.foreign_keys
WHERE name = 'FK')
BEGIN
ALTER TABLE my_table
DROP CONSTRAINT [FK]
END
我试图理解为什么。尤其是因为第一个查询确实有用。
运行此查询会返回带有外键的行(类型为F)
select * from dbo.sysobjects o where o.type = 'F' and name = 'FK'
但运行它不会打印 找到外键 语句
IF (OBJECT_ID('FK', 'F') IS NOT NULL)
BEGIN
PRINT 'Found foreign key'
END
cmets 中建议查询的结果
select LEN(name) as 'Len', CAST(name as varbinary(MAX)) as AsBinary, name from dbo.sysobjects o
where o.type = 'F' and name = 'my_fk_name'
给我
108 | 0x46004B005F0049........006F006E0049006400 | my_fk_name
和
select id from dbo.sysobjects o
where o.type = 'F' and name = 'my_fk_name'
select OBJECT_NAME(TheObjectId)
给我
my_fk_name
【问题讨论】:
-
您只是缺少对象类型参数。试试 IF (OBJECT_ID('FK', 'F') IS NOT NULL....
-
@EricBrandt 对不起,我的查询中有这个。 Ctrl+c,Ctrl+v错误。
-
嗯。行。当您说查询曾经有效时,您是什么意思?也许对此了解更多会指出一些事情。
-
可能与权限问题有关吗?登录是否有受限权限?
-
@MoeSisko Nah,我在我的登录名下运行它,它具有系统管理员访问权限
标签: sql sql-server tsql