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

您可以在SQLServer 2k5的链接服务器表视图上使用外键吗?

陆星文
2023-03-14
问题内容

我有一个带有链接服务器的SQLServer到其他地方的另一个数据库。我已经在该链接服务器上创建了一个视图

create view vw_foo as
select
[id],
[name]
from LINKEDSERVER.RemoteDatabase.dbo.tbl_bar

我想以下

alter table [baz] 
add foo_id int not null
go

alter table [baz] with check 
add constraint [fk1_baz_to_foo] 
  foreign key([foo_id]) 
  references [dbo].[vw_foo] ([id])
go

但这会产生错误:“外键’fk1_baz_to_foo’引用的对象’dbo.vw_foo’不是用户表。”

如果我尝试使用以下命令将外键直接放在桌子上

alter table [baz] with check 
add constraint [fk1_baz_to_bar] 
  foreign key([foo_id]) 
  references LINKEDSERVER.RemoteDatabase.dbo.tbl_bar ([id])

然后我得到以下错误:

对象名称“ LINKEDSERVER.RemoteDatabase.dbo.tbl_bar”包含的前缀数量超过了最大数量。最大值为2。

有什么办法可以达到同样的效果?


问题答案:

外键不能连接到非本地对象-
它们必须引用本地表。您收到“最大前缀数”错误,因为您引用的表具有4部分的名称(LinkedServer.Database.Schema.Object),而本地对象只有3部分的名称。

其他解决方案:

  1. 将数据从源(视图的位置)复制到与您要在其中添加键的表相同的服务器上。您可以每小时,每天或以其他方式执行此操作,具体取决于源数据的更改频率。
  2. 在源表上添加触发器,以将所有更改推送到本地副本。这基本上与#1相同,但是会立即发生变化
  3. 在您的表中添加一个INSTEAD OF“触发器,该触发器通过从链接服务器中进行选择并比较您尝试进行INSERT / UPDATE的值来手动检查外键约束。如果不匹配,则可以拒绝更改。


 类似资料:
  • 我希望有人能帮我解决这个问题,因为这似乎是一个简单的问题,但在过去的几个小时里,我一直在努力解决这个问题,没有任何安慰。好的,我按照A2托管指南设置了Django。 我只是无法表达我的观点。py文件。 让我给你看一些文件,因为我希望这只是一些明显的错误。 public_html/mysite/mysite/setup。py: public_html/mysite/mysite/url。py: pu

  • 我在架构“ID”中的链接服务器(宿主服务器)上有一个名为“Application”的表。我正在尝试使用< code>sp_help查看相同的详细信息。 但我做不到。问题是:1.sp_help位于schema中。(很明显!)2.但我的表位于另一个名为的模式中。(例如,从ID.Application中选择*) > 我已经将链接服务器添加到我的本地sql server management studio

  • 问题内容: 这有效,返回结果集: 当我尝试将结果集插入表中时: 无法给出此错误: 问题答案: 由于链接服务器“ svrA”的OLE DB提供程序“ SQLNCLI10”无法开始分布式事务,因此无法执行该操作。 消息很清楚也很明确。您所要做的只是打开系统文档,然后按照配置分布式事务的步骤进行操作:配置MS DTC服务 。

  • 我最近注意到,就餐提供了使用服务器启动器的可能性。在本手册中报告: Repast Simphony 2.7中的新增功能是能够使用Web浏览器作为用户交互界面运行您的模型。基于浏览器的GUI具有以下功能: 列表项 2D网格、连续空间和地理(GIS)可视化(目前仅限于编辑样式) 标签式和自由形式可视化布局时间序列图 特工探测 模型参数设置 模型运行时交互(运行、停止、暂停等) 我试着用这种模式启动我的

  • 问题内容: 我能够从 EC2实例* 连接到 VPC中 的 **ElastiCache Redis 实例* 。但是我想知道是否有一种方法可以连接到Amazon EC2实例外部的ElastiCache Redis节点,例如从我的 本地 开发设置或其他供应商提供的VPS实例。 目前,从我的本地设置尝试时: 过了一段时间我才超时。 问题答案: 不,您不能不采取诸如隧道之类的“技巧”,虽然可以通过测试来解决

  • 问题内容: 我的链接服务器设置正确,我可以执行以下查询。 插入[RemoteServer]。[表] SELECT * FROM [LocalServer]。[表] 但是,当我 在事务内* 执行相同的操作时 * 开始将TRAN插入[RemoteServer]。[Table] SELECT * FROM [LocalServer]。[Table] COMMIT TRAN 我收到类似的错误 链接服务器“