【发布时间】:2014-06-08 12:25:16
【问题描述】:
我有两个具有 1:1 关系的表,并使用 IDENTITY 列作为它们的主键。
视图将两个表连接在一起,给人的印象是所有列都真正存储在一个表中。
出于查看目的,这很好,但视图也需要INSTEAD OF INSERT 触发器。
您如何编写这样的触发器来拆分两个表中的列值?
注意:父表中除了标识列之外没有候选键。否则这个问题可能会有所帮助:
INSERT INTO View, INSTEAD OF Trigger, Identity, multiple tables?
(还有一种可能的解决方案是在该问题的答案中为每个字段声明一个变量。)
简化的架构(我省略了 PKEY、FKEY、COLLATIONS 等):
CREATE TABLE
[dbo].[parent]
(
[parent_id] INT IDENTITY(1,1)
, [name] NVARCHAR(100)
)
CREATE TABLE
[dbo].[child]
(
[parent_id] INT NOT NULL
, [child_id] INT IDENTITY(1,1)
, [name] NVARCHAR(100)
)
GO
CREATE VIEW
[dbo].[parent_child]
AS
SELECT
par.[parent_id]
, par.[name] AS "parent_name"
, chi.[child_id]
, chi.[name] AS "child_name"
FROM
[dbo].[parent] par
LEFT OUTER JOIN
[dbo].[child] chi
ON
chi.[parent_id] = par.[parent_id]
GO
触发器模板:
CREATE TRIGGER
[dbo].[parent_child_instead_of_insert]
ON
[dbo].[parent_child]
INSTEAD OF INSERT
AS
BEGIN
-- Implementation here
END
GO
示例数据:
INSERT INTO
[dbo].[parent_child]
(
[parent_name]
, [child_name]
)
SELECT
'parent1'
, 'child1'
UNION
SELECT
'parent2'
, 'child2'
【问题讨论】:
标签: sql sql-server view triggers identity-column