[触发器问题] 往一个表中插入数据另一张表中却插入了两条数据

时间:2022-06-11 20:52:44
{大家好,帮忙解决我现在遇到的数据库中触发器的问题}
【问题描述】:通过触发器,往A表中插入数据,另一张表B表中却插入了两条数据,且一条数据的所有字段值为NULL
【需求描述】:有两张表,A表(tb_work)和B表(tb_submit_work),当触发A表上的触发器时,B表新增一条数据,且全部来自A表。
【备注】:为方便大家帮我解决问题,下面是详细的SQL
【建A表SQL】


CREATE TABLE [dbo].[tb_work](
[work_id] [nvarchar](50) NOT NULL,
[work_title] [nvarchar](50) NOT NULL,
[work_date] [nvarchar](20) NOT NULL,
[work_playrole] [nvarchar](max) NOT NULL,
[work_content] [nvarchar](max) NOT NULL,
[work_summary] [nvarchar](max) NOT NULL,
[work_teacher_id] [nvarchar](20) NOT NULL,
[work_course_id] [nvarchar](20) NOT NULL,
[work_grade] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Work] PRIMARY KEY CLUSTERED 
(
[work_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO




【建B表SQL】


CREATE TABLE [dbo].[tb_submit_work](
[submit_work_id] [nvarchar](20) NOT NULL,
[submit_work_title] [nvarchar](50) NULL,
[submit_work_date] [nvarchar](20) NULL,
[submit_work_playrole] [nvarchar](max) NULL,
[submit_work_content] [nvarchar](max) NULL,
[submit_work_summary] [nvarchar](max) NULL,
[submit_work_teacher_id] [nvarchar](20) NULL,
[submit_work_student_id] [nvarchar](20) NULL,
[submit_work_course_id] [nvarchar](20) NULL,
[submit_work_statues] [int] NULL,
[submit_work_grade] [nvarchar](20) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO


【我的触发器SQL】;


if (object_id('trg_tb_work_insert1', 'TR') is not null)
    drop trigger trg_tb_work_insert1
go

Create Trigger trg_tb_work_insert1
       On tb_work                         --在作业发布表中创建触发器
       for insert                      --为什么事件触发
     As                                        --事件触发后所要做的事情
        declare  @work_id varchar(20);
declare  @work_title nvarchar(50);
declare  @work_date nvarchar(20);
declare  @work_playrole nvarchar(MAX);
declare  @work_content nvarchar(MAX);
declare  @work_summary nvarchar(MAX);
declare  @work_teacher_id nvarchar(20);
declare  @work_course_id nvarchar(20);
declare  @work_grade nvarchar(20);

select  @work_id=work_id ,
@work_title=work_title,
@work_playrole=work_playrole ,
@work_content =work_content,
@work_summary=work_summary,
@work_teacher_id=work_teacher_id,
@work_course_id=work_course_id,
@work_grade=work_grade
from inserted /*这里的Inserted 是在创建触发器时候 系统自动创建的内存表*/
  
        insert into tb_submit_work(submit_work_id,submit_work_title,submit_work_playrole,submit_work_content, submit_work_summary, submit_work_teacher_id, submit_work_course_id,submit_work_grade,submit_work_statues)
                    values(@work_id,@work_title,@work_playrole,@work_content,@work_summary,@work_teacher_id,@work_course_id,@work_grade,0)


go
   


【PS】:为什么insert到A表中只有一条数据,通过这个触发器,而B表中insert进去了两条数据呢?
【测试用例】


USE [沃克管家]
GO

INSERT INTO [dbo].[tb_work]
           ([work_id]
           ,[work_title]
           ,[work_date]
           ,[work_playrole]
           ,[work_content]
           ,[work_summary]
           ,[work_teacher_id]
           ,[work_course_id]
           ,[work_grade])
     VALUES
           ('w10010'
           ,'近景拍摄(一)'
           ,'2013-05-25'
           ,'角色'
           ,'<P>近景拍摄</P>
<P></P>
<P>拟达到这样的效果</P>
<P></P><IMG alt="" src="file:///D:/BOBO资料/资料-图片/创意图/SAM_2253%20(2).jpg" width=864 height=648>'
           ,'心得'
           ,'t2009022229'
           ,'c1004'
           ,'播主1班')
GO



【截图说明】
[触发器问题] 往一个表中插入数据另一张表中却插入了两条数据
[触发器问题] 往一个表中插入数据另一张表中却插入了两条数据
【谢了】


2 个解决方案

#1


看了半天。。。不懂。。。不知道机制是什么样的 [触发器问题] 往一个表中插入数据另一张表中却插入了两条数据

#2


我的问题这里看到了一片帖子,求这个特殊现象的解决方案
http://bbs.csdn.net/topics/340072595

#1


看了半天。。。不懂。。。不知道机制是什么样的 [触发器问题] 往一个表中插入数据另一张表中却插入了两条数据

#2


我的问题这里看到了一片帖子,求这个特殊现象的解决方案
http://bbs.csdn.net/topics/340072595