如何在使用身份的多表视图上编写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 解决方案: |
|
|
|
|
|