Modifier et vérifier datatables lors de l'utilisation de Bulk Insert à partir du file CSV – SQL

J'utilise la méthode ci-dessous en insérant des données du file csv dans SQL.

BULK INSERT tblMember FROM 'F:\target.txt' WITH ( DATAFILETYPE='widechar', CODEPAGE = 'ACP', FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', ERRORFILE = 'C:\CSVDATA\ErrorRows.csv', ) GO 

J'ai besoin de faire deux choses. Vérifiez d'abord si tous les caractères de la colonne Un du file CSV pour chaque ligne sont uniquement des numbers et si oui, insérez-le. Et aussi j'ai besoin d'append un mot spécifique avant ces caractères lors de l'insertion.

 01 - 123,M,A,USA 02 - H24,N,Z,USA 

Je dois seulement insert la ligne un, parce que la colonne un est seulement des nombres de chiffre «123», et j'ai besoin d'append «D» avant que ces nombres et l'insèrent alors dans SQL. donc nous avons quelque chose comme ça est SQL après insertion:

 "D123","M","A","USA" 

Possible?

Considérons un exemple de file CSV (dans C Drive) target-c.txt qui contient quatre lignes de données (remarquez que j'ai utilisé target-c.txt non target.txt )

 123,M,A,USA H24,N,Z,USA H25,N,V,USA 456,M,U,USA 

Créez maintenant un file au format non XML (dans C Drive) nommé targetFormat.fmt . et remplir le file de la manière suivante

 9.0 4 1 SQLCHAR 0 100 "," 1 Col1 SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 100 "," 2 Col2 SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 100 "," 3 Col3 "" 4 SQLCHAR 0 100 "\r\n" 4 Col4 SQL_Latin1_General_CP1_CI_AS 

S'il vous plaît soyez prudent avec cette mise en forme.Cliquez sur ce lien si vous voulez en savoir plus sur le file au format non XML. L'exemple de base serait comme ceci. entrez la description de l'image ici Veuillez changer le file de format en fonction de vos besoins (comme DataType, ChaterLength, etc.)

J'ai créé un exemple de table tblMember (s'il vous plaît changer selon votre path, comme le nom de la colonne, type de données, etc Rappelez-vous que vous devez changer le file targetFormat.fmt aussi)

 CREATE TABLE tblMember ( Col1 nvarchar(50), Col2 nvarchar(50) , Col3 nvarchar(50) , Col4 nvarchar(50) ); 

Ensuite, utilisez la requête suivante pour l'insertion en bloc selon votre méthode ( ajoutez un caractère "D" devant Col1 avec une valeur entière )

 INSERT INTO tblMember(Col1,Col2,Col3,Col4) ( select 'D'+t1.Col1 AS Col1,t1.Col2,t1.Col3,t1.Col4 from openrowset(bulk 'C:\target-c.txt' , formatfile = 'C:\targetFormat.fmt' , firstrow = 1) as t1 where t1.Col1 not like '%[^0-9]%' --Not Like Letter Number mixed (123, 456) UNION select t1.Col1,t1.Col2,t1.Col3,t1.Col4 from openrowset(bulk 'C:\target-c.txt' , formatfile = 'C:\targetFormat.fmt' , firstrow = 1) as t1 where t1.Col1 like '%[^0-9]%'--Like Letter Number mixed (H24, H25) ) 

Maintenant, si vous select votre table, vous obtiendrez ceci (j'ai essayé et son fonctionnement fonctionne bien) entrez la description de l'image ici

Voici votre réponse Vous pouvez order la colonne si vous le souhaitez. C'est très facile, il suffit de maintenir la requête dans une première parenthèse et de l'ordonner ou de la formater selon votre façon.