【问题标题】:SQL insert statement from another table loop来自另一个表循环的 SQL 插入语句
【发布时间】:2013-03-16 20:48:03
【问题描述】:

我正在尝试从一个表中获取值并将它们插入到另一个表中。但是,有一个数据库列需要每次增加 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。任何帮助表示赞赏

【问题讨论】:

    标签: sql loops insert


    【解决方案1】:

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

    使用序列重写您的代码。

    【讨论】:

      【解决方案2】:

      假设您使用的是 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;
      

      【讨论】:

        【解决方案3】:
        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'
        

        【讨论】:

        • Ravindra,我这样做了:SELECT *, IDENTITY(int, 1,1) AS IDCol FROM Cabinet.Document_Names INTO cabinet..document_names_robby WHERE Set_Id = '1';插入机柜..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,'2',SUSPEND_DELAY,Text_Editing,Restrict_Viewing ,Viewing_Expire, Viewing_Period,DocHdrLength,DocFtrLength,DocRuleId,Outbound,SigQueue,SigReason) SELECT * FROM cabinet..document_names_robby; DROP TABLE cabinet..document_names_robby;
        • but got Msg 177, Level 15, State 1, Line 1 IDENTITY 函数只能在 SELECT 语句有 INTO 子句时使用。消息 102,级别 15,状态 1,第 3 行“2”附近的语法不正确。用户留下的另一条评论像我原来的那样产生了超过 14000 行
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 2014-02-28
        • 1970-01-01
        • 2021-10-16
        • 2011-07-04
        相关资源
        最近更新 更多