问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在SQL Server中,怎样INSERT多基表的视图(含两个表,有标识列,子表外键为ON NULL)

发布网友 发布时间:2022-04-10 01:58

我来回答

3个回答

热心网友 时间:2022-04-10 03:28

第四次回答:
SET NOCOUNT ON 表示语句或存储过程不返回任何值,如果存储过程(触发器)中包含一些并不返回许多实际数据的语句,网络通信流量便会大量减少,将 SET NOCOUNT 设置为 ON 可显著提高性能。
在你这里,没必要加这个。

我给出的SQL代码是insert的,update的请楼主参考insert的触发器自行解决,相信那样才真的学进去了哦~(其实也很简单,理解了主外键和自增列的原理就不难)

如果仍有疑惑,请点击“在线交谈”或“离线留言”,给我发消息。我有时间的话可以和你一起探讨下这个问题。
————————————————————————————————
第三次回答:
那你能否把你的问题描述下呢?另外,你是在2010-01-02 10:20之后参照我的回答做的呢?
————————————————————————————————
第二次回答:
下面的回答于2010-01-02 10:20 修改,之前的触发器写错了两个地方。
————————————————————————————————
第一次回答:
楼上的回答没有考虑到update的情况。

另外,你的问题中提到ON NULL,是不是指:ON DELETE/UPDATE SET NULL?
如果是那样的话,子表中的商品ID(int,not null)外键、不可为空就不对,应该是可以为空才行。所以不明白你说on null的含义。请讲清晰。

以下触发器用以简单地处理标识列:

CREATE TRIGGER Trig_商品与规格Insert ON View_商品与规格
INSTEAD OF INSERT
AS
BEGIN

declare @商品ID int

IF (NOT EXISTS (SELECT 1 FROM A1商品表 A,inserted i WHERE A.商品ID = i.商品ID))
begin
INSERT A1商品表(商品分类ID,商标,外部调整,内部调整,品名代号,曾用品名代号)
SELECT 商品分类ID,商标,外部调整,内部调整,品名代号,曾用品名代号
FROM inserted
select @商品ID = @@IDENTITY
end
else
begin
select @商品ID = 商品ID from inserted
update A1商品表
set 商品分类ID = i.商品分类ID/*其它省略,请自己加*/
from A1商品表 a, inserted i
where a.商品ID = i.商品ID
end

IF (NOT EXISTS (SELECT 1 FROM A3商品规格表_轴承 B, inserted i
WHERE B.商品规格表_轴承ID = i.商品规格表_轴承ID))
INSERT A3商品规格表(商品ID,内径mm,外径mm,厚度mm,重量kg)
SELECT @商品ID,内径mm,外径mm,厚度mm,重量kg
FROM inserted
ELSE
UPDATE A3商品规格表_轴承
SET 商品ID = @商品ID,
内径mm = i.内径mm,
外径mm = i.外径mm,
厚度mm = i.厚度mm,
重量kg = i.重量kg
FROM A3商品规格表_轴承 B, inserted i
WHERE B.商品规格表_轴承ID = i.商品规格表_轴承ID
END

以上基本可以使用,但是仍然存在一个问题,就是如果当你插入到视图中的IDENTITY值不在表中的时候,即需要insert到基表的时候,绝大部分情况下基表自动增长的IDENTITY主键值不会等同于插入到视图中的IDENTITY值,这个时候如果你再插入同样的数据到视图,那么相应的数据又会insert到基表,这可能不是你所希望的。
如果要排除这种情况,首先需要保证你插入到视图中的IDENTITY值是有规律或者是唯一的,即起到主键值的作用。这时,你需要另外建一个表专门存放插入到视图中的IDENTITY值,以及实际在基表中的主键值。插入视图的时候如果发现在这个表中已经存在IDENTITY值,则将IDENTITY值改成相应的基表的主键值进行update.
当然,你还得区分,当这个IDENTITY值在基表中存在以及在这个专门存放插入到视图IDENTITY值的表也存在的时候如何处理,这需要看你的实际需求来决定。

热心网友 时间:2022-04-10 04:46

--------------创建基表
create table A1 (
/*商品ID*/ GID int not null PRIMARY KEY IDENTITY(1,1),
/*商品分类ID */GKID smallint,
/*商标 */SB nvarchar(20),
/*外部调整*/ WBTZ nvarchar(20),
/*内部调整*/ NBTZ nvarchar(20),
/*品名代号 */PMDH nvarchar(20),
/*曾用品名代号 */OPMDH nvarchar(20)
)

CREATE TABLE A3
/*商品规格表_轴承ID*/(GGID int not null PRIMARY KEY IDENTITY(1,1),
/*商品ID(*/GID int not null,
/*内径mm(*/NJ decimal(8,2),
/*外径mm(*/WJ decimal(8,2),
/*厚度mm(*/HD decimal(8,2),
/*重量kg(*/ZL decimal(6,3),
CONSTRAINT FOR_A1_GID FOREIGN KEY (GID) REFERENCES A1(GID)
)
---------------------创建视图
create view V_A1_A3 AS
SELECT A1.*,A3.NJ,A3.WJ,A3.HD,A3.ZL FROM A1 LEFT JOIN A3 ON A1.GID=A3.GID

SELECT * FROM V_A1_A3

-----------创建触发器
CREATE TRIGGER T_VA1_3_INSERT ON V_A1_A3
INSTEAD OF INSERT
AS

DECLARE @GID INT
BEGIN
SET NOCOUNT ON
-- IF NOT EXISTS (SELECT * FROM A1 JOIN INSERTED I WHERE A1.GID=I.GID)
BEGIN
INSERT INTO A1 (GKID,SB,WBTZ,NBTZ,PMDH,OPMDH)
SELECT GKID,SB,WBTZ,NBTZ,PMDH,OPMDH FROM INSERTED
SELECT @GID=@@IDENTITY ---得到最新插入的自增长值

INSERT INTO A3 (GID,NJ,WJ,HD,ZL)
SELECT @GID,NJ,WJ,HD,ZL FROM INSERTED
END
END

INSERT INTO V_A1_A3 VALUES(11,11,11,1,11,22,33,44,12,76,33)
SELECT * FROM V_A1_A3
SELECT * FROM A1
SELECT * FROM A3

你可以试试,我测试了 代码没有问题。你再研究研究,有问题hi我

热心网友 时间:2022-04-10 06:20

象你的示例那样,加一句SET NOCOUNT ON

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你可以将gulingeagle的答案中,语句的第二句写成
INSTEAD OF INSERT,UPDATE
然后试一下。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
做了好乱的梦,求解! ae缺少p1效果是要装什么插件? ...荣耀》中“网络诊断”居然可以测定酒店有无摄像头,这是好事吗? 七叶一枝花花苞里面的红米是什么 q了是什么意思? ...Q就可以,格式也没错,也只几十K,别人发给我都可以,哪里出问题了... 显的么说友Q在微 ?Q上新示怎让在说我空里动间的态不更好博 诺诗兰户外品牌怎么样 新隋唐英雄传张卫健萧妃是刘小庆吗 红尖椒和朝天椒介绍!红尖椒和朝天椒哪个辣? 大白菜木耳怎么做好吃 打印机是兄弟DCP7010 , 装好驱动了 ,但添加打印机的时候没有此型号的,为什么?求解 brother dcp 7010 打印机问题~ ~ ~ 兄弟7010打印机驱动下了安不上 按你说的做了找不到文件呀 兄弟打印机DCP-7010打印机扫描仪驱动哪有? 我体重110公斤,每天晚上只吃清水煮白菜片加木耳或者银耳,多长时间能减肥?对身体有好处还是坏处? 兄弟dcp-7010打印机打不出来,上不来纸怎么处理有人知道吗?兄弟急!!! 120分! 兄弟牌DCP7010打印机怎么安装驱动啊?急!急!急! 完成后再追加100分! 急求黄帝内经全文及译文!! 水煮白菜木耳是减肥食品吗 兄弟7010 驱动安装 提示 安装时出错 请重新启动计算机 再安装 但是我重启了也不能安装啊 我要安装兄弟牌7010打印机的驱动 兄弟7010打印机驱动如何安装 兄弟打印机DCP7010驱动怎么安装?详细,XP系统 兄弟DCP7010怎么下载驱动及安装? sqlserver错误以更新或删除的 行值要么不能 王者荣耀代练没拿到标给钱吗 - 信息提示 电脑开机后显示欢迎使用但是开不了机是怎么回事 电脑开得了机但却进不了系统,不能启用任何模式,无选项,所有内部硬件无问题。求解!! 中午3点以前购买朋华中证酒指数基金(160632)的净值为什么与基金网上的净值不? 全注全译黄帝内经的内容简介 每天吃鸡蛋,油白菜,木耳,海带 会减肥吗? 我16日下午在网上7点买的基金按哪天的净值算? 哪些菜吃有利于减肥 白菜胡萝卜炒木耳最正宗的做法 哪些蔬菜有利减肥 赵小棠粉丝竟然上热搜了?他们干什么了? 1617258月26日为什么从1.5元变成|元净值? 鸡和什么一起煲汤好喝又营养 鸡煲汤搭配什么最好 烤奶酪面包的做法,烤奶酪面包怎么做好吃,烤奶 奶酪烤面包片怎么做 如何查基金历史净值? 总统牌烤面包奶酪怎么做 奶酪面包片的做法步骤图,奶酪面包片怎么做 特别喜欢吃刚出炉的奶酪包,怎么在家制作? 鸡和什么煲汤好喝营养 鸡跟什么煲汤好喝 烤奶酪面包怎么做好