Ordinamento in SQL Server

order sqlbulkcopy sql-server-2008

Domanda

Ho una situazione in cui sto importando molte righe di dati da file di testo. Il processo di importazione si verifica utilizzando SqlBulkCopy e viene inizialmente caricato in una tabella di staging.

Eseguo una convalida su questi dati e vorrei poter riportare all'utente quale linea del file è in errore se la validazione fallisce. Speravo di utilizzare semplicemente ROW_NUMBER () insieme all'ordinamento predefinito di SELECT sulla mia tabella di staging, ma ci sono alcune domande su SO che hanno suggerito che non sarei in grado di farlo.

Cosa suggeriresti come metodo per consentirmi di mantenere l'ordine originale del file di input? Il formato del file di input è TSV. Devo creare un valore fittizio che indichi la riga del file?

C'è un modo per segnalare il risultato della query nell'ordine degli inserimenti originali? Potrei contare su questo dato ho usato SqlBulkCopy per caricare la data in massa?

Risposta popolare

Ho scoperto che sono in grado di preservare l'ordine della tabella di origine utilizzando BULK INSERT in un file, seguito dall'aggiunta di un'identità.

Data una tabella delimitata da tabulazioni, C:\MyTable.txt , dove ho intenzionalmente spostato le righe fuori ordine:

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

Ho eseguito quanto segue e ho mantenuto l'ordine dei file di testo in 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

Risultato:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow