Commande dans SQL Server

order sqlbulkcopy sql-server-2008

Question

Je suis dans une situation où j'importer de nombreuses lignes de données à partir de fichiers texte. Le processus d'importation se produit à l'aide de SqlBulkCopy et se charge initialement dans une table de transfert.

J'effectue une validation sur ces données et souhaite pouvoir signaler à l'utilisateur la ligne du fichier erronée en cas d'échec de la validation. J'espérais simplement utiliser ROW_NUMBER () avec le classement par défaut de SELECT sur ma table intermédiaire, mais certaines questions sur SO ont suggéré de ne pas pouvoir le faire.

Que suggéreriez-vous comme méthode pour me permettre de conserver l'ordre d'origine du fichier d'entrée? Le format de fichier d'entrée est TSV. Dois-je créer une valeur fictive indiquant une ligne de fichier?

Est-il possible de signaler le résultat de la requête dans l'ordre des insertions d'origine? Est-ce que je peux m'appuyer sur ceci étant donné que j'ai utilisé SqlBulkCopy pour charger la date en masse?

Réponse populaire

J'ai constaté que je pouvais conserver l'ordre de la table source en utilisant BULK INSERT dans un fichier, suivi de l'ajout d'une identité.

Avec une table délimitée par des tabulations, C:\MyTable.txt , où j'ai intentionnellement déplacé des lignes dans le 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

J'ai exécuté ce qui suit et préservé l'ordre des fichiers texte dans 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

Résultat:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi