1

我将MS SQLSSIS结合使用,我需要为给定的 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)。我需要的是一个选择/插入语句来复制数据。

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

我尝试将 Insert into 与 Select 结合使用,但它总是以错误结尾(聚合问题)。

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

我需要如何构建这个语句?

谢谢你的帮助。

4

3 回答 3

2

既然您说您需要insert into select尝试一下,然后根据需要添加条件..

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

为了给出更好的答案,您可能至少需要显示您当前的查询以及增量的机制,表模式......我什至可以假设你已经在这一步......

于 2013-01-24T08:39:27.580 回答
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

希望这可以帮助

于 2013-01-24T09:32:44.347 回答
1

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

INSERT INTO MyTable
SELECT *
FROM MyTable
WHERE DocumentID =123 AND ...
于 2013-01-24T08:39:55.283 回答