我将 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 ...
我如何构建此声明?
感谢您的帮助。
答案 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 ...