SQL - 在同一个表中复制数据并增加版本

时间:2013-01-24 08:26:17

标签: sql sql-server select insert ssis

我将 MS SQL SSIS 结合使用,我需要复制并粘贴表格的行(相同的表格用于来源和目的地)对于给定的DocumentID,同时递增“subversion”列。

示例:

DocumentID=123 | Location=a | Version=2 |Subversion=4
DocumentID=123 | Location=b | Version=2 |Subversion=4
DocumentID=123 | Location=c | Version=2 |Subversion=4
复制后

DocumentID=123 | Location=a | Version=2 |Subversion=5
DocumentID=123 | Location=b | Version=2 |Subversion=5
DocumentID=123 | Location=c | Version=2 |Subversion=5

在SSIS中,我已经增加了max(Subversion)(在示例中从4增加到5)。 我需要的是一个复制数据的select / insert语句。

由于这个表有大约150列,我希望没有列出所有列的方法,但如果可能的话,我找不到任何信息。

我已经尝试将Insert插入到Select中,但它总是以错误(聚合问题)结束。

  Insert Into MyTable (AllMyColumns)
  select (AllmyColumns)
  from MyTable
  where DocumentID =123 AND ...

我如何构建此声明?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

既然你说你需要insert into select试试这个,并根据你的需要添加条件......

INSERT INTO table1(docid, location, version, subversion)
SELECT  (docid, location, version, subversion)
FROM    table1
;

为了给出更好的答案,您可能需要至少显示当前查询以及增量,表格架构的机制...我甚至可以假设您已经处于此步骤...

答案 1 :(得分:2)

我认为以下解决方法可以帮助您。

--Move incremental rows to the #temp table
Select * into #temp from MyTable where DocumentID=123 and ......

Declare @version varchar(20)

Select @version = Max(SubVersion) from #temp

--To increment the value
set @version='Subversion='+Cast(Substring(@version,charindex('=',@version)+1,len(@version)) as int)+1

--To update the value into temp
update #temp set SubVersion=@version

--Now insert into your table
insert into MyTable
Select * from #temp

--drop the temp table
drop table #temp

希望这有帮助

答案 2 :(得分:1)

如果您的源列和目标列的顺序相同,那么只需执行以下操作:

INSERT INTO MyTable
SELECT *
FROM MyTable
WHERE DocumentID =123 AND ...
相关问题