加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

你可以在SQLServer 2k5的一个链接服务器表的视图上有一个外键吗

发布时间:2020-12-12 07:06:22 所属栏目:MsSql教程 来源:网络整理
导读:我有一个带有链接服务器的SQLServer到另一个其他数据库.我在该链接服务器上创建了一个视图 create view vw_foo asselect[id],[name]from LINKEDSERVER.RemoteDatabase.dbo.tbl_bar 我想谈谈以下内容 alter table [baz] add foo_id int not nullgoalter table
我有一个带有链接服务器的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])

然后我收到以下错误:

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相同,但具有直接的变化>向表中添加“INSTEAD OF”触发器,通过从链接服务器中进行选择并比较您尝试INSERT / UPDATE的值来手动检查外键约束.如果不匹配,则可以拒绝更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读