L'utilitaire SQLCMD génère des lignes rejetées dans un fichier plat.

sqlbulkcopy sqlcmd sql-server

Question

J'utilise actuellement l'utilitaire SQLCMD pour charger les données CSV sur SQL Server. Ci-dessous ma commande qui a été exécutée à l'invite de commande pour charger les données:

sqlcmd -Usa -Pxxx -S192.168.1.223,49546 -dlocal -i"/test.sql" -o"/test.log"

J'ai également copié le contenu de mon fichier test.sql pour votre référence:

SET NOCOUNT ON 
BULK INSERT test FROM 
"\\192.168.1.223\test.csv"
WITH
(
MAXERRORS = 1000000,
CODEPAGE = 1251,
FIELDTERMINATOR = '~%',
ROWTERMINATOR = '0x0a'
)
GO
SELECT CONVERT(varchar,@@ROWCOUNT) + ' rows affected'
GO

L'opération d'insertion fonctionne bien avec le processus ci-dessus. Mais ce qui me préoccupe, c’est que, dans le cas d’erreurs dues au type de données ou à leur longueur, la ligne est rejetée et que je ne parviens pas à suivre la ligne en question.

Chaque fois, je dois consulter le fichier journal pour connaître le numéro de la ligne rejetée et le fichier de données pour vérifier la ligne correspondante.

Existe-t-il une option permettant de générer la ligne d'erreur / rejetée dans un autre fichier, comme dans ORACLE - Utilitaire SQLPLUS permettant de générer un fichier incorrect ?

Réponse acceptée

Je pense que l'option que vous recherchez ne se trouve pas dans sqlcmd, mais dans BULK INSERT :

ERRORFILE = 'nom_fichier'

Spécifie le fichier utilisé pour collecter les lignes comportant des erreurs de formatage et ne pouvant pas être converties en ensemble de lignes OLE DB. Ces lignes sont copiées dans ce fichier d'erreur à partir du fichier de données "en l'état".



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