注册 登录
编程论坛 SQL Server论坛

如何在插入数据的时候判断表中是否已有

cydesign 发布于 2007-01-24 22:28, 1571 次点击
我的意思是,原来有一组数据,更新到数据库中了,接着追加几条数据到这组数据中,把现在的这组数据全部再插入到数据库时,我想实现的是:他本来已经更新到数据库中的数据就不再重复插入了,只插入新追加的数据。

版主说可以通过触发器和临时表实现,但是能否举些实例呢?具体是如何实现的?我们新手没有实例真的无从入手阿!谢谢!
9 回复
#2
xu20002007-01-24 23:56
插入时应先判断是目标表中有没有要插入的记录就可以了。
用exists加游标。
#3
cydesign2007-01-25 02:26
以下是引用xu2000在2007-1-24 23:56:00的发言:
插入时应先判断是目标表中有没有要插入的记录就可以了。
用exists加游标。

呵呵,完全不明白。游标是什么?我很菜啊!

麻烦给个范例可以么?

#4
棉花糖ONE2007-01-25 09:58

可以用临时表,把表中没有的记录选出来存到临时表中,再把临时表中的数据插入表

#5
Kendy1234562007-01-25 10:44

给你个例子

首先把你要追加的数据放进临时表 (我喜欢用表变量 一样)

Declare @tbl Table
(UserName varchar(20),
Pwd varchar(20),
Email varchar(20)
)
Insert into @tbl values ('A','aa','aa@aaa.com')
Insert into @tbl values ('B','bb','bb@bbb.com')
Insert into @tbl values ('C','cc','cc@ccc.com')
Insert into @tbl values ('D','dd','dd@ddd.com')

先删除已经存在的数据
Delete @tbl from @tbl a, user b where a.UserName = b.UserName and a.Pwd =b.Pwd and a.Email =b.Email
再插入
Insert into User (Username,Pwd,Email)
Select User,Pwd,Name from @tbl

[此贴子已经被作者于2007-1-25 10:44:05编辑过]

#6
cydesign2007-01-25 19:53

谢谢各位,我先研究一下

#7
ninggang2007-01-25 23:31

顶,学到了
我一般临时表用的是Create table #表名(。。。。)
不过这里用到了
Declare @table table
(列名 数据类型(长度),
列名 数据类型(长度)

难到两者真的从本质上是一样的吗?

#8
棉花糖ONE2007-01-25 23:32

用表变量是进行优化的手段,可以缓解tempdb数据库的负担,但是有一些限制,具体的也记不清了

#9
Kendy1234562007-01-26 09:07

SQL帮助上有的啊:

可将函数和变量声明为 table 类型。table 变量可用于函数、存储过程和批处理中。

尽可能使用表变量而不使用临时表。table 变量有以下优点:

table 变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。
在其作用域内,table 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的地方。但是,table 不能用在下列语句中:

INSERT INTO table_variable EXEC 存储过程。

SELECT select_list INTO table_variable 语句。

在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量。

表类型声明中的 CHECK 约束、DEFAULT 值和计算列不能调用用户定义函数。


在存储过程中使用 table 变量与使用临时表相比,减少了存储过程的重新编译量。


涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。
不支持在表变量之间进行赋值操作。另外,由于表变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

#10
yuexiayiyu2007-01-26 09:18
学习学习!
1