来自另一个表循环的SQL insert语句

时间:2013-03-16 12:28:58

标签: sql loops insert

我正在尝试从表中获取值并将它们插入另一个表中。但是,有一个数据库列每次需要增加1个值。此值虽然不是标识插入列,但值来自另一个表。还有另一个db列充当计数器。我写了几件事,但它没有帮助: (121份文件)

declare @count int;
set @count=0
while @count<=121
begin
insert into cabinet..DOCUMENT_NAMES_ROBBY (TAG,TAGORDER,ACTIVE,QUEUE,REASON,FORM,DIRECT_VIEW,GLOBAL,FU_SIGN,
SIGN_X,SIGN_Y,SIGN_W,SIGN_H,ANNOTATE,doctype_id,CODE,DOC_TYPE,SET_ID,SUSPEND_DELAY,Text_Editing,Restrict_Viewing,Viewing_Expire,
Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason) select TAG,TAGORDER,ACTIVE,QUEUE,REASON,FORM,
DIRECT_VIEW,GLOBAL,FU_SIGN,
SIGN_X,SIGN_Y,SIGN_W,SIGN_H,ANNOTATE,(select nextid from cabinet..Wfe_NextValue where Name='documents')+1, CODE,DOC_TYPE,'2',SUSPEND_DELAY,Text_Editing,Restrict_Viewing,Viewing_Expire,
Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason from cabinet..document_names where SET_ID ='1'
update cabinet..Wfe_NextValue set NextID=NextID+1 where Name='documents'
set @count=@count+1
end

该数据库列是doctype_id。上面显然出错了,并在表中放了14,000行。基本上我想从document_names中获取每一个条目并将其放在document_names_robby中...除了doctype_id列应该从wfe_nextvalue +1获取值,同时在插入下一个文档名称之前将该表中的数字增加1到document_Names_Robby。任何帮助表示赞赏

3 个答案:

答案 0 :(得分:0)

许多热门数据库支持sequences。对于序列,有一个函数 nextval 返回序列值并递增序列计数器和 currval 返回最新的先前返回值,也可以设置初始值和增量。当在表列中存储计数器时,序列是线程安全的。

使用序列重写代码。

答案 1 :(得分:0)

假设您使用的是 SQL Server 数据库。使用IDENTITY功能

SELECT *, IDENTITY(int, 1,1) AS IDCol FROM Cabinet.DocumentNames INTO #Tab1 WHERE Set_Id = '1';    
insert into cabinet..DOCUMENT_NAMES_ROBBY (TAG,TAGORDER,ACTIVE,QUEUE,REASON,FORM,DIRECT_VIEW,GLOBAL,FU_SIGN,
SIGN_X,SIGN_Y,SIGN_W,SIGN_H,ANNOTATE,doctype_id,CODE,DOC_TYPE,SET_ID,SUSPEND_DELAY,Text_Editing,Restrict_Viewing,Viewing_Expire,
Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason) 
SELECT * FROM #Tab1;
DROP TABLE #Tab1;

答案 2 :(得分:0)

declare @count int;
set @count=0
declare @nextId int;
select @nextId= nextid from cabinet..Wfe_NextValue where Name='documents'
while @count<=121
begin
insert into cabinet..DOCUMENT_NAMES_ROBBY         (TAG,TAGORDER,ACTIVE,QUEUE,REASON,FORM,DIRECT_VIEW,GLOBAL,FU_SIGN,
        SIGN_X,SIGN_Y,SIGN_W,SIGN_H,ANNOTATE,doctype_id,CODE,DOC_TYPE,SET_ID,SUSPEND_DELAY,Text_Edi    ting,Restrict_Viewing,Viewing_Expire,
Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason) select     TAG,TAGORDER,ACTIVE,QUEUE,REASON,FORM,
DIRECT_VIEW,GLOBAL,FU_SIGN,
SIGN_X,SIGN_Y,SIGN_W,SIGN_H,ANNOTATE,(select nextid from cabinet..Wfe_NextValue where     Name='documents')+1,     CODE,DOC_TYPE,'2',SUSPEND_DELAY,Text_Editing,Restrict_Viewing,Viewing_Expire,
Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason from     cabinet..document_names where SET_ID ='1'
set @count=@count+1
end
update cabinet..Wfe_NextValue set NextID=NextID+121 where Name='documents'