1

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 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 に答える