2013-07-18 5 views
5

J'utilise BULK INSERT pour charger un fichier texte dans SQL Server créé à partir d'une base de données SQL Anywhere. Le fichier texte que nous recevons contient des champs contenant des caractères de tabulation. Ils sont dans le fichier texte échappé comme "\ x09". Puis-je obtenir SQL Server pour reconnaître cette séquence d'échappement?BULK INSERT fichier délimité par des tabulations - unescape x09

Certaines lignes possèdent suffisamment de ces séquences d'échappement pour provoquer une erreur de troncature lorsque j'effectue le BULK INSERT. Je préférerais que SQL Server les rétablisse dans les caractères de tabulation.


Mise à jour (7/26): voici par exemple les données du fichier

ID Name  Desc 
1  Value 1 Some text:\x09with tabs 
2  Value 2 More Text:\x09with more\x09tabs 

Ainsi, dans cet exemple, il faut 31 caractères pour exprimer la valeur pour le champ Desc pour l'enregistrement avec ID 2. Cependant, il devrait être inséré dans la base de données de 25 caractères.

+0

Pouvez-vous préciser si vous voulez que l'insertion en bloc pour diviser en colonnes par onglet, ou si vous voulez qu'il soit une longue colonne avec des onglets à l'intérieur. –

+0

La séquence d'échappement (\ x09) doit être insérée dans une seule colonne db en tant que caractère de tabulation. J'ai mis à jour la question avec des données de fichier d'exemple – Dingels35

Répondre

7

Utilisation table temporaire:

IF OBJECT_ID('tempdb..#test1') IS NOT NULL 
DROP TABLE #test1; 
GO 

CREATE TABLE #test1 
    (
    ID integer NOT NULL, 
    Name varchar(30) NOT NULL, 
    [Desc] varchar(50) NOT NULL, 
    ) 


BULK 
INSERT #test1 
FROM 'd:\111.txt' 
WITH 
(
FIELDTERMINATOR = '\t', 
ROWTERMINATOR = '\n' 
); 

SELECT ID, Name, REPLACE([Desc], '\x09', ''), '\x09' AS Delimeter 
--INTO YourTable 
FROM #test1 
Questions connexes