【问题标题】:SQL - copy data within same table and increment versionSQL - 在同一个表中复制数据并增加版本
【发布时间】:2013-01-07 22:38:02
【问题描述】:

我将 MS SQLSSIS 结合使用,我需要在其中复制和粘贴表的行(源和目标的相同表) 对于给定的 DocumentID,同时递增“颠覆”列。

示例:

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 ...

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

感谢您的帮助。

【问题讨论】:

  • 发布您当前的声明。你为什么要为此使用 SSIS?应该可以使用纯 SQL 查询,因为源和目标是同一个表
  • 解释整个项目不是我的问题:-)
  • 很好。祝你好运得到答案:)

标签: sql sql-server select insert ssis


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    INSERT INTO MyTable
    SELECT *
    FROM MyTable
    WHERE DocumentID =123 AND ...
    

    【讨论】:

      【解决方案3】:

      我认为以下解决方法会对您有所帮助。

      --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
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-04
        • 2016-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        相关资源
        最近更新 更多