【发布时间】:2013-07-08 16:01:52
【问题描述】:
我正在设置一个视图 (foo),以代替同名的表。新视图将使用 3 个子表(A、B、C)而不是原始表。我正在使用而不是触发器来完成此操作。
CREATE VIEW [dbo].[foo]
AS
select
b2 as oldkey,
b3 as boat,
c2 as state,
a2 as name
from
A
join B on a1 = b1
join C on a1 = c1
foo 列:oldkey(身份)|船| 高分辨率照片| CLIPARTO状态 |名字
我的问题是我有一个大型代码库,它被写入 foo 中,如下所示:
insert into foo
values
('fishing boat', 'California', 'Skipper')
但此代码当前无法正常工作,因为 insert-of-insert/view 也希望提供键值。键值是B表的标识,不需要插入。
错误:“列名或提供的值的数量与表定义不匹配。”
我需要进行哪些更改才能使已存在的插入代码库继续运行?
【问题讨论】:
-
在
INSTEAD OF INSERT触发器中,您需要插入第一个表,获取新定义的标识列值,然后填充包括该外键在内的其他表。您应该向我们展示您的触发代码! -
@marc_s 我确实这样做了。我所有用于插入/更新/删除的代码都有效。我认为问题在于我如何声明视图。
-
呃,那也给我们看看?
-
@AaronBertrand 我已经为视图添加了通用代码。
标签: sql sql-server tsql triggers