SQL while循环与选择查询

SQL while循环与选择查询,sql,sql-server,database,Sql,Sql Server,Database,我正在努力完成以下任务: 我收到一个DocumentID。查找表中与特定DocumentID匹配的所有记录,例如,我有10条匹配的记录,每条记录都具有不同的DocumentAttachmentID。 我用新数据更新所有记录。 问题是,我需要将这十条记录中的一些信息+收到的其他信息插入一个新表,即历史表,即我需要在那里插入十条新记录 我用游标成功地做到了这一点,但由于性能原因,游标看起来不是很好 有没有办法循环遍历我从这个表中选择的10条记录,并为每条记录获取一些信息,添加一些附加信息,然后将其插

我正在努力完成以下任务: 我收到一个DocumentID。查找表中与特定DocumentID匹配的所有记录,例如,我有10条匹配的记录,每条记录都具有不同的DocumentAttachmentID。 我用新数据更新所有记录。 问题是,我需要将这十条记录中的一些信息+收到的其他信息插入一个新表,即历史表,即我需要在那里插入十条新记录

我用游标成功地做到了这一点,但由于性能原因,游标看起来不是很好

有没有办法循环遍历我从这个表中选择的10条记录,并为每条记录获取一些信息,添加一些附加信息,然后将其插入到另一个表中

编辑: 我试图做到这一点没有循环(谢谢大家的答案) 我明天试试,你觉得这样行吗

在第一次更新中,我更新了所有文档附件, 第二个块是INSERT TO,它应该在另一个表中插入带有一些额外列的所有文档附件

UPDATE [sDocumentManagement].[tDocumentAttachments]
         SET DeletedBy = @ChangedBy,
             DeletedOn = @CurrentDateTime,
             IsDeleted = 1,
         WHERE DocumentID = @DocumentID;

         INSERT INTO [sDocumentManagement].[tDocumentHistory] ( DocumentAttachmentID, DocumentID, ActivityCodeID, ChangedOn, ChangedBy, AdditionalInformation )
         SELECT DocumentAttachmentID,
                @DocumentID, [sCore].[GetActivityCodeIDByName] ( 'DeletedDocument' ),
                @CurrentDateTime,
                @ChangedBy,
                @AdditionalInformation
         FROM [sDocumentManagement].[tDocumentAttachments]
         WHERE DocumentID = @DocumentID;

对于无光标的循环,我经常使用以下技术:

DECLARE @items TABLE(id INT, val INT);

DECLARE @id INT;
DECLARE @val INT;

WHILE EXISTS(SELECT * FROM @items) BEGIN
    SELECT TOP(1) @id = id, @val = val FROM @items;
    DELETE FROM @items WHERE (id = @id);

    --do what is needed with the values here.
    SELECT @id, @val;
END

这将@items表视为一个队列,一次一行地拖出一行,直到其为空。

光标是一个循环。只需将其作为基于集合的插入即可。这不需要循环。。。但一些样本数据和预期输出在这里会有所帮助。。。从另一个角度看,这都是伪代码。您能为这两个表提供SQL create语句吗?然后我可以为插入连接提供SQL。你可以在这里找到解决方案,不要再考虑循环了。循环是这类事情的禁忌。