sql server返回插入记录的ID(多条记录)
需要先插入多条数据到表1,然后再将表1中插入的多条记录的ID插入到表2,这种情况要怎么取到多个ID?表1的ID是自动增长的那种是在SQLServer2000下我想要的效果...
需要先插入多条数据到表1,然后再将表1中插入的多条记录的ID插入到表2,这种情况要怎么取到多个ID?表1的ID是自动增长的那种
是在SQL Server 2000下
我想要的效果是在存储过程中执行一条insert select语句插入多条数据,然后在每插入一条数据后返回刚插入的这条ID,因为这时需要把ID再插到另一个表中,这种效果能实现吗?
不用触发器可以实现吗?因为我是想只有批量插入时才调用这个存储过程 展开
是在SQL Server 2000下
我想要的效果是在存储过程中执行一条insert select语句插入多条数据,然后在每插入一条数据后返回刚插入的这条ID,因为这时需要把ID再插到另一个表中,这种效果能实现吗?
不用触发器可以实现吗?因为我是想只有批量插入时才调用这个存储过程 展开
展开全部
你的这个需求好象直接再把记录插入到表2就可以,但我估计你不是这个意思。
比较笨的办法,可以定义一个数组用于记录表1的ID值,或者用个临时表来记录表一新增加的记录ID列表。
insert后,query的指针应该还是停留在最新增加的记录上的,因此是可以取得到ID值的。
代码如下,假设表一只有二个字段,一个是ID(自动增量),一个是字段A(字符型),
var
sql:string;
id1:integer;
begin
sql:='insert into 表一 ('''+字段A+''') values ('''+ '内容'+''')';
query1.close;
query1.sql.clear;
query1.sql.add(sql);
query1.Execsql;
id1:=query1.fieldbyname('id').asinteger;
//接下来可以把ID1的值写入临时表或者数组了,如果是需要不同的机器取得ID值,可以用临时表,不过速度会慢些,如果只是本机取得,就用数组好了。
//后面的代码略
...
...
end;
上述代码我没有条件试,应该可以,另外还可以用append的方法追加记录,这样就一定可以用上面的方法取到ID值了。
var
id1:integer;
begin
query1.append;
query1.fieldbyname('字段A').asstring = '内容';
query1.post;
id1:=query1.fieldbyname('ID').asinteger;
//这种方法一定可以取得到ID值。
//后面你自行对取得的ID进行存储就行了,临时表或者数组都可以。代码略
end;
比较笨的办法,可以定义一个数组用于记录表1的ID值,或者用个临时表来记录表一新增加的记录ID列表。
insert后,query的指针应该还是停留在最新增加的记录上的,因此是可以取得到ID值的。
代码如下,假设表一只有二个字段,一个是ID(自动增量),一个是字段A(字符型),
var
sql:string;
id1:integer;
begin
sql:='insert into 表一 ('''+字段A+''') values ('''+ '内容'+''')';
query1.close;
query1.sql.clear;
query1.sql.add(sql);
query1.Execsql;
id1:=query1.fieldbyname('id').asinteger;
//接下来可以把ID1的值写入临时表或者数组了,如果是需要不同的机器取得ID值,可以用临时表,不过速度会慢些,如果只是本机取得,就用数组好了。
//后面的代码略
...
...
end;
上述代码我没有条件试,应该可以,另外还可以用append的方法追加记录,这样就一定可以用上面的方法取到ID值了。
var
id1:integer;
begin
query1.append;
query1.fieldbyname('字段A').asstring = '内容';
query1.post;
id1:=query1.fieldbyname('ID').asinteger;
//这种方法一定可以取得到ID值。
//后面你自行对取得的ID进行存储就行了,临时表或者数组都可以。代码略
end;
展开全部
其实触发器是可以实现的,只要在触发器里面加入一个判断插入数据的行数就可以了:
IF object_id('TR_Insert_tableA') is not null
drop trigger TR_Insert_tableA
go
create trigger TR_Insert_tableA
on tableA for insert
as
begin
IF (Select count(*) from inserted)>1
begin
insert into tableB(id) select id from inserted
end
end
如果一定要用存储过程也是有很多办法的,具体可以Hi我
IF object_id('TR_Insert_tableA') is not null
drop trigger TR_Insert_tableA
go
create trigger TR_Insert_tableA
on tableA for insert
as
begin
IF (Select count(*) from inserted)>1
begin
insert into tableB(id) select id from inserted
end
end
如果一定要用存储过程也是有很多办法的,具体可以Hi我
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
插入数据如果带有时间字段,可以用查询语句找出来
insert into 表2
select id from 表1 where 时间条件
否则的话,在表1建立一个触发器,每插一次就插入表2
create trigger myt
as
begin
@id integer
select id into @at from inserted
if @id>0 then
insert into 表2
select id from inserted
end if
end
insert into 表2
select id from 表1 where 时间条件
否则的话,在表1建立一个触发器,每插一次就插入表2
create trigger myt
as
begin
@id integer
select id into @at from inserted
if @id>0 then
insert into 表2
select id from inserted
end if
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询