sql插入数据问题

FoolRabbit 2012-05-22 12:36:04
有两张表,表A和表B,可以理解为:表A主表,表B附表
向 表A 插入一条数据,取出自增长@@IDENTITY,和其他一些信息,插入 表B。
目前需要向 表A 插入 很多数据,不要用循环,有什么好的方法?
...全文
146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoolRabbit 2012-06-12
  • 打赏
  • 举报
回复
最好的方法觉得还是加一列做关联
Dear SQL(燊) 2012-05-25
  • 打赏
  • 举报
回复
如果是SQL SERVER 2005以上的版本用OUTPUT就可以了
我腫了 2012-05-25
  • 打赏
  • 举报
回复
再加個表存儲吧,然後用日期或者User篩選Insert.
FoolRabbit 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

SQL code

--有两张表,表A和表B,可以理解为:表A主表,表B附表
--向 表A 插入一条数据,取出自增长@@IDENTITY,和其他一些信息,插入 表B。
--目前需要向 表A 插入 很多数据,不要用循环,有什么好的方法?

DECLARE @MID INT,@IDENT INT

SELECT @MID=MAX(ID) FROM tbA

INSERT INTO tbA(...)……
[/Quote]

操作不能锁表,又有并发操作,此法行不通
我腫了 2012-05-25
  • 打赏
  • 举报
回复

--有两张表,表A和表B,可以理解为:表A主表,表B附表
--向 表A 插入一条数据,取出自增长@@IDENTITY,和其他一些信息,插入 表B。
--目前需要向 表A 插入 很多数据,不要用循环,有什么好的方法?

DECLARE @MID INT,@IDENT INT

SELECT @MID=MAX(ID) FROM tbA

INSERT INTO tbA(...)
SELECT ... UNION ALL
SELECT ... UNION ALL
...

SET @IDENT=SCOPE_IDENTITY()

INSERT INTO tbB(...)
SELECT ... FROM tbA
WHERE ID BETWEEN @MID+1 AND @IDENT

我腫了 2012-05-25
  • 打赏
  • 举报
回复

--有两张表,表A和表B,可以理解为:表A主表,表B附表
--向 表A 插入一条数据,取出自增长@@IDENTITY,和其他一些信息,插入 表B。
--目前需要向 表A 插入 很多数据,不要用循环,有什么好的方法?

DECLARE @MID INT,@IDENT

SELECT @MID=MAX(ID) FROM tbA

INSERT INTO tbA(...)
SELECT ... UNION ALL
SELECT ... UNION ALL
...

SET @IDENT=SCOPE_IDENTITY()

INSERT INTO tbB(...)
SELECT ... FROM tbA
WHERE ID BETWEEN @MID+1 AND @IDENT
  • 打赏
  • 举报
回复

go
create trigger test on A
for insert
as
inert B(col1,col2,....)
select col1,col2,....from inserted

--触发器吧


FoolRabbit 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

插入前找出表A最大的自增号,插入后将所有大于这个自增号的记录连同其他数据插入表B。
比如表A自增字段为ID,那么:
declare @a int
select @a=max(id) from 表A

insert into 表A values ()... --插入表A记录

insert into 表B
select * from 表A
where id>@a -……
[/Quote]

操作不锁表,得考虑并发操作!
zczhangchao2003 2012-05-22
  • 打赏
  • 举报
回复
插入数据后IDENTITY(1,1)不能作为存储过程的输出吗?
gogodiy 2012-05-22
  • 打赏
  • 举报
回复
插入前找出表A最大的自增号,插入后将所有大于这个自增号的记录连同其他数据插入表B。
比如表A自增字段为ID,那么:
declare @a int
select @a=max(id) from 表A

insert into 表A values ()... --插入表A记录

insert into 表B
select * from 表A
where id>@a --将表A所有ID大于@a的记录插入表B
  • 打赏
  • 举报
回复
那也不能不用啊!确实是尽量少用,但不是不用
FoolRabbit 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

go
create trigger test on A
for insert
as
inert B(col1,col2,....)
select col1,col2,....from inserted

--触发器吧
[/Quote]

触发器是不建议用的

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧