触发器里面语句疑问

wwfxgm 2017-11-22 08:57:28
表的语句如下:
CREATE TABLE dbo.AA (
JC_ID INT IDENTITY (1, 1),
XN VARCHAR (20) NOT NULL,
XQ tinyint NOT NULL,
KCMC VARCHAR (150) NOT NULL,
ISBN VARCHAR (50) NOT NULL,
JCMC VARCHAR (200) NOT NULL,
CBS VARCHAR (150) NOT NULL,
BB VARCHAR (50) NOT NULL,
JCZZ VARCHAR (150) NOT NULL,
XBX VARCHAR (20) NOT NULL,
BZ VARCHAR (200) NULL,
CONSTRAINT PK_AA PRIMARY KEY (XN, XQ, ISBN)
);


具体触发器语句如下:

CREATE TRIGGER dbo.AA_tri ON [dbo].BB
FOR INSERT
AS
BEGIN

INSERT INTO dbo.AA
( XN,XQ,KCMC,ISBN,JCMC,CBS,BB,JCZZ,XBX
)
SELECT DISTINCT XN,XQ,开设课程,教材ISBN,教材名称,出版社,版别,作者,选必修
FROM inserted AS I
WHERE NOT EXISTS (SELECT 1 FROM dbo.AA WHERE xn = I.xn AND xq=I.xq AND ISBN = I.[教材ISBN])

END


这里居然设置了 条件 WHERE NOT EXISTS (SELECT 1 FROM dbo.AA WHERE xn = I.xn AND xq=I.xq AND ISBN = I.[教材ISBN]
但是实际测试,导入数据到 dbo.BB,触发器开始工作,但是老是提示DBO.AA 表 有重复键值。 很多无法导入。
那么应该是这个 where语句不起左右吧。 导入重复数据去插入了,引起数据插入出现问题。
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月路明 2017-11-22
  • 打赏
  • 举报
回复
1.如果是批量插入[dbo].BB,很可能有重复记录 2.如果是单条记录,前面几位已经说明了
听雨停了 2017-11-22
  • 打赏
  • 举报
回复
你插入的这数据中XN, XQ, ISBN的值存在重复的,所以报主键重复。就算你设置了 条件 WHERE NOT EXISTS (SELECT 1 FROM dbo.AA WHERE xn = I.xn AND xq=I.xq AND ISBN = I.[教材ISBN]也是没用的,因为刚开始重复的数据还没有在表AA里。 建议在表BB上也设置那三个字段作为主键,这样就不会存在插入的数据中主键重复的问题了
吉普赛的歌 2017-11-22
  • 打赏
  • 举报
回复
SELECT [name] AS triggerName
,OBJECT_NAME(t.parent_id) AS tableName
,t.modify_date
,t.is_disabled
FROM sys.triggers AS t
执行了把截图贴出来看一下
二月十六 2017-11-22
  • 打赏
  • 举报
回复
是不是除了XN, XQ, ISBN这三个字段,其他字段有不同的,所以DISTINCT没起作用
wwfxgm 2017-11-22
  • 打赏
  • 举报
回复
嗯,自己没有检查仔细。是重复了。
xiaoxiangqing 2017-11-22
  • 打赏
  • 举报
回复
先要保证插入的数据不能有重复

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧