SQL Serverでの注文

order sqlbulkcopy sql-server-2008

質問

テキストファイルから多くの行のデータをインポートしている状況があります。インポートプロセスはSqlBulkCopyを使用して行われ、最初にステージングテーブルに読み込まれます。

私はこのデータに対していくつかの検証を行い、検証に失敗した場合にファイルのどの行がエラーであるかをユーザに報告できるようにしたいと考えています。私は単純にステージングテーブルのSELECTのデフォルトの順序と一緒にROW_NUMBER()を使用することを望んでいましたが、私はこれを行うことができないことを示唆しているので、 いくつかの 質問があります。

入力ファイルの元の順序を保持できる方法として何をお勧めしますか?入力ファイル形式はTSVです。ファイル行を示すモック値を作成する必要がありますか?

元の挿入順にクエリの結果を報告する方法はありますか? SqlBulkCopyを使用して日付を読み込むと、私はこれに頼ることができますか?

人気のある回答

私は、 BULK INSERTをファイルに使用してソーステーブルの順序を保持し、続いてIDを追加できることを発見しました。

タブ区切りのテーブルC:\MyTable.txt 、意図的に行が順不同で移動しています。

FileName    FileType
wmsetup log
bar txt
wmsetup10   log
WMSysPr9    prx
WMSysPrx    prx
Wudf01000Inst   log
xpsp1hfm    log
_default    pif
0   log
002391_ tmp
005766_ tmp

私は以下を実行し、SQL Serverのテキストファイルの順序を保存しました:

IF EXISTS(
    SELECT 1
    FROM sys.tables t
    INNER JOIN sys.schemas s on s.schema_id=t.schema_id
    WHERE t.name='myTable'
    AND t.[type]='U'
    AND s.name='dbo'
)
DROP TABLE myTable
GO

CREATE TABLE dbo.myTable(FileName VARCHAR(80), FileType VARCHAR(30))
GO

BULK INSERT myTable FROM 'C:\MyTable.txt' WITH (
firstrow=2
, fieldterminator='\t'
, rowterminator='\n'
)
GO

ALTER TABLE myTable ADD ID INT IDENTITY(1,1)
GO

SELECT * FROM myTable
GO

結果:

FileName        FileType ID
--------------- -------- -----------
wmsetup         log      1
bar             txt      2
wmsetup10       log      3
WMSysPr9        prx      4
WMSysPrx        prx      5
Wudf01000Inst   log      6
xpsp1hfm        log      7
_default        pif      8
0               log      9
002391_         tmp      10
005766_         tmp      11


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ