当前位置: 首页 > 面试题库 >

为什么不能使用OBJECT_ID()函数找到外键?

曹原
2023-03-14
问题内容

我在MS SQL Server
2012中有一个奇怪的问题。我正在尝试检查升级脚本中是否已存在外键。我过去使用过系统OBJECT_ID()函数来查找表,视图和过程,但是当我尝试使用它来查找外键时,它是行不通的。

-- This query always returns null
SELECT OBJECT_ID(N'FK_Name', N'F')

-- This query works, returning the object ID for the foreign key
SELECT object_id FROM sys.foreign_keys WHERE name=N'FK_Name'

问题答案:

可能是您的外键正在表中查找的不是默认模式(可能是dbo)。在这种情况下,object_id直到您指定架构,您才能看到以下内容:

SELECT OBJECT_ID(N'<schema>.FK_Name', N'F')

实际上,您的数据库中可能有多个具有相同名称的对象,但它们位于不同的模式中。OBJECT_ID(N'FK_Name', N'F')将在默认架构中返回对象的ID。

您可以像这样测试它:

create schema test
create table test.temp1 (id int primary key)
create table test.temp2 (id int)
go

alter table test.temp2 add constraint FK_temp foreign key(id) references test.temp1(id)

select object_id('FK_temp', 'F')  -- returns null
select object_id('test.FK_temp', 'F') -- returns object id

drop table test.temp2
drop table test.temp1
drop schema test

[sql fiddle demo](http://sqlfiddle.com/#!6/c0059/1)



 类似资料:
  • 我试图找到这个按钮并点击它。但我得到了这个错误: 我注意到它正在寻找不同的字符串bc它在类名前面添加了这个点。这是问题吗? 非常感谢。

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?

  • 问题内容: 我想确保数据库中是否存在临时表。 我尝试使用函数,但似乎无法将其用于临时表。 我该如何解决这个问题? 问题答案: 使用 在另一个数据库的上下文中运行时获取临时表的ID。

  • 预计此函数将无法typeCheck。然而,没有解释发生这种情况的原因。在GHCI中试用时,我得到了以下输出: 为什么会出现这种情况?

  • 我不断地得到错误: 下面是Spring有问题的类: 我找到的答案都是...若要定义默认构造函数,请执行以下操作。那...就在那里,来自龙目岛的@noargsconstructor,对吗?即使我把它去掉,自己定义,也不会改变什么。 我尝试自己定义这两个构造函数(no args和all args)都没有用,然后添加了@autowired,这导致了一个错误,即没有'string'bean,这让我在这个阶