【问题描述】:通过触发器,往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
看了半天。。。不懂。。。不知道机制是什么样的
#1
看了半天。。。不懂。。。不知道机制是什么样的
#2
我的问题这里看到了一片帖子,求这个特殊现象的解决方案
http://bbs.csdn.net/topics/340072595
http://bbs.csdn.net/topics/340072595