如题所述
用IF NOT EXIsTS(SELECT 列出的字段 FROM 表名 WHERE 条件)
INSERT .........-----插入语句
INSERT .........-----插入语句
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-09-22
判断是否存在相同数据,一般使用【Exists】函数判断。
EXISTS
指定一个子查询,检测行的存在。
语法
EXISTS subquery
参数
subquery
是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。
结果类型
Boolean
结果值
如果子查询包含行,则返回 TRUE。
例如:表【dbo.tb_e_User】,其中列【UserID】不允许重复
if exists(select 0 from dbo.tb_b_User where UserID='TestUserID')begin
raiserror 50001 '用户名已存在,请不要重复添加。'
end
else
begin
insert into dbo.tb_b_User (UserID) values ('TestUserID')
end
第2个回答 2013-08-28
用触发器
create TRIGGER 触发器名
ON 表
FOR insert
AS
begin
declare @a varchar
---定义需要判断的字段
set @a = ''
select @a = a from inserted
if exists (select 1 from 表 where @a = a)
---判断值是否有了或者相同,或者你改成需要的判断语句
ROLLBACK TRANSACTION
---回滚操作
end追问
create TRIGGER 触发器名
ON 表
FOR insert
AS
begin
declare @a varchar
---定义需要判断的字段
set @a = ''
select @a = a from inserted
if exists (select 1 from 表 where @a = a)
---判断值是否有了或者相同,或者你改成需要的判断语句
ROLLBACK TRANSACTION
---回滚操作
end追问
那要是多字段怎么写呢,还有这个错:
这里SQL语句,你是SQL数据库的吗?
多个字段需要定义多个变量,如有字段a,b,c,d
declare @a varchar
declare @b varchar
declare @c varchar
declare @d varchar
set @a = ''
set @b = ''
set @c = ''
set @d = ''
select @a = a from inserted
select @b = b from inserted
select @c = c from inserted
select @d = d from inserted
第3个回答 2013-08-28
将表设置主键约束,重复的值就插不进去了。插入时会报键值错误
第4个回答 2013-08-28
没有简单的方法,都insert 进去之后,在distinct 吧,看看能不能行追问
我的意思就是不插入冗余的值
追答如果非要这么弄写一个存储过程吧,而且效率目测不会太高,每插入一条之前,都先去比较一下,会很慢,还不如把冗余的数据插进去,再往外剔除呢