栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

受这个问题的启发,我对一个INSTEAD OF
INSERT触发器进行了以后的检验,
提出了一个使用临时表的解决方案,该临时表

#inserted
是该
inserted
表的完整副本。

触发器在该表上添加了一个临时标识列,从而可以使用唯一值遍历插入的行。

剩下的就是使用游标的简单循环,该游标首先将每一行插入到父表中,然后使用

SCOPE_IDENTITY()
插入子行。

与“为每列声明一个变量”解决方案相比,此解决方案具有优势,即您只需要获取临时标识值而不是所有列即可。

在性能方面,它可能不是很好,因为必须复制插入表中的所有数据。

SELECt * INTO [dbo].[#inserted] FROM [inserted]ALTER TABLE [dbo].[#inserted] ADD [temp_id] INT IDENTITY(1,1)DECLARE  @temp_id intDECLARE  cur CURSORFORSELECt  [temp_id]FROM   [dbo].[#inserted]OPEN curFETCH cur INTO @temp_idWHILE @@FETCH_STATUS = 0BEGININSERT INTO   [dbo].[parent](  [name])SELECt  [parent_name]FROM  [#inserted]WHERe  [temp_id] = @temp_idINSERT INTO  child(    [parent_id]  , [name])SELECt    SCOPE_IDENTITY()  , [child_name]FROM  [dbo].[#inserted]WHERe  [temp_id] = @temp_idFETCH cur INTO @temp_idENDCLOSE curDEALLOCATE cur


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号