SQL while循环与选择查询
我正在努力完成以下任务: 我收到一个DocumentID。查找表中与特定DocumentID匹配的所有记录,例如,我有10条匹配的记录,每条记录都具有不同的DocumentAttachmentID。 我用新数据更新所有记录。 问题是,我需要将这十条记录中的一些信息+收到的其他信息插入一个新表,即历史表,即我需要在那里插入十条新记录 我用游标成功地做到了这一点,但由于性能原因,游标看起来不是很好 有没有办法循环遍历我从这个表中选择的10条记录,并为每条记录获取一些信息,添加一些附加信息,然后将其插入到另一个表中 编辑: 我试图做到这一点没有循环(谢谢大家的答案) 我明天试试,你觉得这样行吗 在第一次更新中,我更新了所有文档附件, 第二个块是INSERT TO,它应该在另一个表中插入带有一些额外列的所有文档附件SQL while循环与选择查询,sql,sql-server,database,Sql,Sql Server,Database,我正在努力完成以下任务: 我收到一个DocumentID。查找表中与特定DocumentID匹配的所有记录,例如,我有10条匹配的记录,每条记录都具有不同的DocumentAttachmentID。 我用新数据更新所有记录。 问题是,我需要将这十条记录中的一些信息+收到的其他信息插入一个新表,即历史表,即我需要在那里插入十条新记录 我用游标成功地做到了这一点,但由于性能原因,游标看起来不是很好 有没有办法循环遍历我从这个表中选择的10条记录,并为每条记录获取一些信息,添加一些附加信息,然后将其插
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。你可以在这里找到解决方案,不要再考虑循环了。循环是这类事情的禁忌。