gpt4 book ai didi

sql - 您可以在 SQLServer 2k5 中的链接服务器表的 View 上使用外键吗?

转载 作者:行者123 更新时间:2023-12-02 22:32:31 25 4
gpt4 key购买 nike

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

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])

然后我收到以下错误:

The object name 'LINKEDSERVER.RemoteDatabase.dbo.tbl_bar' contains more than the maximum number of prefixes. The maximum is 2.

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

最佳答案

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

其他解决方案:

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

关于sql - 您可以在 SQLServer 2k5 中的链接服务器表的 View 上使用外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com