向表A(id,name)中插入数据,如果表中有完全相同的数据则不操作,如果没有则插入。(不用存储过程)
最常规的方式是用insert实现insertintotablenameselectno,A,'2011'Bfromtablenamet1whereB='2010'andn...
最常规的方式是用insert实现
insert into tablename
select no,A, '2011' B from tablename t1
where B = '2010'
and not exists (
select 1 from tablename t2 where t1.a = t2.a and t2.B = '2011'
)
这个是不可以的,我试了下。
我指的是同一个表中,如果同一个表中不能在此数据则不操作,否则则插入。不用存储过程,触发器 展开
insert into tablename
select no,A, '2011' B from tablename t1
where B = '2010'
and not exists (
select 1 from tablename t2 where t1.a = t2.a and t2.B = '2011'
)
这个是不可以的,我试了下。
我指的是同一个表中,如果同一个表中不能在此数据则不操作,否则则插入。不用存储过程,触发器 展开
展开全部
insert into table1(id,name,others) select id,name,others from table2 a where a.id not in (select id from table1) or a.name not in (select name from table1)
这句可以实现:当table2中的id和name的值不同时在table1中出现的时候,将该id、name、others的值插入到table1中
你可以自己扩展一下表的字段,实现你要的功能
这句可以实现:当table2中的id和name的值不同时在table1中出现的时候,将该id、name、others的值插入到table1中
你可以自己扩展一下表的字段,实现你要的功能
追问
我指的是同一个表中判断,不是多个。
追答
insert into table select... 这种格式的的sql语句必须是两张表的操作关系。
如果你是单一张表的,insert into table (字段1,字段2,字段3) values(value1,value2,value3) 后面不能再加where 条件语句,所以按照您的要求,无法实现了。
通常这种情况下我都先进行判断,或者触发。本人才疏学浅,呵呵,贻笑大方了。
2011-06-21
展开全部
用触发器啊,按照下面的这个修改下就行了的。
CREATE TRIGGER insert_gread ON 成绩表
AFTER insert
AS
if exists
(select * from inserted
where (学号 in (select 学号 from 学生基本信息表 )
and (课程编号 in (select 课程编号 from 课程信息表))
and 成绩>=0 and 成绩<=100
)
)
print '添加成功!'
else
BEGIN PRINT '学号或课程编号不合法!'
ROLLBACK TRANSACTION
END
CREATE TRIGGER insert_gread ON 成绩表
AFTER insert
AS
if exists
(select * from inserted
where (学号 in (select 学号 from 学生基本信息表 )
and (课程编号 in (select 课程编号 from 课程信息表))
and 成绩>=0 and 成绩<=100
)
)
print '添加成功!'
else
BEGIN PRINT '学号或课程编号不合法!'
ROLLBACK TRANSACTION
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询