回答

收藏

如何在使用身份的多表视图上编写INSTEAD OF INSERT触发器?

技术问答 技术问答 348 人阅读 | 0 人回复 | 2023-09-12

我有两个表有1:1的关系,用IDENTITY列为其主键。
  v& O! R  w2 g2 w5 ~4 p8 R0 Z视图将两个表连接在一起,给人的印象是所有列实际上都存储在一个表中。
. `2 g+ w+ D8 o% i这很好,但视图也需要INSTEAD OF INSERT触发器。/ O: R- @& j5 b/ L# U
如何编写这样的触发器来分割两个表之间的列值?
( W6 }2 o% A; w注意    :除了父表中的identity除此之外,没有其他候选键。否则,这个问题可能会有所帮助:
" p- Y6 Y+ l; z简化的架构(我省略了)PKEY,FKEY,COLLATIONS等):( o3 b0 [2 f* v' O( l5 ]% S
CREATE TABLE  [dbo].[parent](    [parent_id] INT IDENTITY ,[name]      NVARCHAR(100))CREATE TABLE  [dbo].[child](    [parent_id] INT NOT NULL  ,[child_id]  INT IDENTITY ,[name]      NVARCHAR(100))GOCREATE VIEW  [dbo].[parent_child]ASSELECT    par.[parent_id]  ,par.[name]      AS "parent_name"  ,chi.[child_id]  ,chi.[name]      AS "child_name"FROM  [dbo].[parent] parLEFT OUTER JOIN  [dbo].[child] chiON  chi.[parent_id] = par.[parent_id]GO触发模板:- K0 o* ^% r0 C$ L. {. @( h
CREATE TRIGGER  [dbo].[parent_child_instead_of_insert]ON  [dbo].[parent_child]INSTEAD OF INSERTASBEGIN  -- Implementation hereENDGO示例数据:* R% U" e7 y: L7 ~( Q3 X' q* d
INSERT INTO   [dbo].[parent_child](    [parent_name]  ,[child_name])SELECT   parent1'  ,'child1' UNION SELECT   parent2'  ,'child         
" N1 S& [/ r2 q0 T. @- M    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则