0

テーブルから値を取得して、別のテーブルに挿入しようとしています。ただし、毎回1つの値ずつ増やす必要があるデータベース列が1つあります。この値はID挿入列ではありませんが、値は別のテーブルから取得されます。カウンターとして機能する別の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に。どんな助けでも大歓迎です

4

3 に答える 3

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;
于 2013-03-16T12:37:11.600 に答える
0

多くの一般的なデータベースがシーケンスをサポートしています。シーケンスには、シーケンス値を返し、シーケンスカウンターをインクリメントする関数nextvalと、前回の最新の戻り値を返すcurrvalがあり、初期値とインクリメントを設定することもできます。テーブル列にカウンターを格納する場合、シーケンスはスレッド セーフではありません。

シーケンスを使用してコードを書き直します。

于 2013-03-16T12:36:18.630 に答える
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'
于 2013-03-16T12:48:03.370 に答える