Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bulk insert

3 réponses
Avatar
Philippe
bonjour à tous,

je patine sur l'utilisation de bulk insert à partir d'un fichier txt , voilà
mon problème:

j'ai créé une table:
/****** Objet : Table [dbo].[Résidences] Date de génération du script :
01/14/2008 17:03:04 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[Résidences]') AND type in (N'U'))
DROP TABLE [dbo].[Résidences]
GO
CREATE TABLE [dbo].[Résidences](
[résidence] [nvarchar](64) NOT NULL,
[résidenceId] [bigint] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Résidences_1] PRIMARY KEY CLUSTERED
([résidenceId] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Objet : Index [IX_Résidences] Date de génération du script :
01/14/2008 16:41:35 ******/
CREATE NONCLUSTERED INDEX [IX_Résidences] ON [dbo].[Résidences]
([résidence] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO


le contenu du fichier TXT : BAB Résidences.txt est le suivant :
IIIIIIIIIIII I I
IIII IIIIIII I
1929
2
2 MAISONS

chaque ligne se termine par CRLF
Je n'ai pas de caractère de split particulier si ce n'est la fin de chaque
ligne

j'ai essayé :
BULK INSERT cabab.dbo.Résidences
FROM 'D:\BAB Résidences.txt'
WITH (
FIELDTERMINATOR = '\n',
ROWTERMINATOR = '\n'
)
GO

j'obtiens tout en erreur :
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de type
ou caractère non valide pour la page de codes spécifiée) pour la ligne 1,
colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de type
ou caractère non valide pour la page de codes spécifiée) pour la ligne 3,
colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de type
ou caractère non valide pour la page de codes spécifiée) pour la ligne 4,
colonne 2 (résidenceId).
etc...

Quelle(s) caractère(s) dois je indiquer pour charger la table?? , le
contenu d'une ligne du fichier texte (hors CRLF) alimente la colonne
"Résidence" de la table

D'avance merci
Philippe

3 réponses

Avatar
Jean-Pierre Riehl
Bonjour,

Tu dois utiliser l'option FORMATFILE pour préciser les colonnes que tu
importes du fichier.

BULK INSERT [résidences]
FROM 'c:data.txt'
WITH (
FORMATFILE='c:format.fmt')

avec dans le fichier format :

------
9.0
1
1 SQLCHAR 0 0 "rn" 1 col1 "<collation>"
------

Consultes "BULK INSERT - format files" dans l'aide de SQL Server pour plus
de détails.


--
Jean-Pierre Riehl
http://www.blog.djeepy1.net
http://www.bewise.fr


"Philippe" wrote in message
news:
bonjour à tous,

je patine sur l'utilisation de bulk insert à partir d'un fichier txt ,
voilà mon problème:

j'ai créé une table:
/****** Objet : Table [dbo].[Résidences] Date de génération du script :
01/14/2008 17:03:04 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[Résidences]') AND type in (N'U'))
DROP TABLE [dbo].[Résidences]
GO
CREATE TABLE [dbo].[Résidences](
[résidence] [nvarchar](64) NOT NULL,
[résidenceId] [bigint] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Résidences_1] PRIMARY KEY CLUSTERED
([résidenceId] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Objet : Index [IX_Résidences] Date de génération du script :
01/14/2008 16:41:35 ******/
CREATE NONCLUSTERED INDEX [IX_Résidences] ON [dbo].[Résidences]
([résidence] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO


le contenu du fichier TXT : BAB Résidences.txt est le suivant :
IIIIIIIIIIII I I
IIII IIIIIII I
1929
2
2 MAISONS

chaque ligne se termine par CRLF
Je n'ai pas de caractère de split particulier si ce n'est la fin de chaque
ligne

j'ai essayé :
BULK INSERT cabab.dbo.Résidences
FROM 'D:BAB Résidences.txt'
WITH (
FIELDTERMINATOR = 'n',
ROWTERMINATOR = 'n'
)
GO

j'obtiens tout en erreur :
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 1, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 3, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 4, colonne 2 (résidenceId).
etc...

Quelle(s) caractère(s) dois je indiquer pour charger la table?? , le
contenu d'une ligne du fichier texte (hors CRLF) alimente la colonne
"Résidence" de la table

D'avance merci
Philippe



Avatar
Philippe
Merci beaucoup,
j'ai effectivement trouvé dans la doc SQL la description d'un fichier
format.
Je n'y avais pas prété attention.

Philippe


"Jean-Pierre Riehl" a écrit dans le message de
news:
Bonjour,

Tu dois utiliser l'option FORMATFILE pour préciser les colonnes que tu
importes du fichier.

BULK INSERT [résidences]
FROM 'c:data.txt'
WITH (
FORMATFILE='c:format.fmt')

avec dans le fichier format :

------
9.0
1
1 SQLCHAR 0 0 "rn" 1 col1 "<collation>"
------

Consultes "BULK INSERT - format files" dans l'aide de SQL Server pour plus
de détails.


--
Jean-Pierre Riehl
http://www.blog.djeepy1.net
http://www.bewise.fr


"Philippe" wrote in message
news:
bonjour à tous,

je patine sur l'utilisation de bulk insert à partir d'un fichier txt ,
voilà mon problème:

j'ai créé une table:
/****** Objet : Table [dbo].[Résidences] Date de génération du script :
01/14/2008 17:03:04 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[Résidences]') AND type in (N'U'))
DROP TABLE [dbo].[Résidences]
GO
CREATE TABLE [dbo].[Résidences](
[résidence] [nvarchar](64) NOT NULL,
[résidenceId] [bigint] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Résidences_1] PRIMARY KEY CLUSTERED
([résidenceId] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Objet : Index [IX_Résidences] Date de génération du script :
01/14/2008 16:41:35 ******/
CREATE NONCLUSTERED INDEX [IX_Résidences] ON [dbo].[Résidences]
([résidence] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO


le contenu du fichier TXT : BAB Résidences.txt est le suivant :
IIIIIIIIIIII I I
IIII IIIIIII I
1929
2
2 MAISONS

chaque ligne se termine par CRLF
Je n'ai pas de caractère de split particulier si ce n'est la fin de
chaque ligne

j'ai essayé :
BULK INSERT cabab.dbo.Résidences
FROM 'D:BAB Résidences.txt'
WITH (
FIELDTERMINATOR = 'n',
ROWTERMINATOR = 'n'
)
GO

j'obtiens tout en erreur :
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 1, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 3, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 4, colonne 2 (résidenceId).
etc...

Quelle(s) caractère(s) dois je indiquer pour charger la table?? , le
contenu d'une ligne du fichier texte (hors CRLF) alimente la colonne
"Résidence" de la table

D'avance merci
Philippe






Avatar
Philippe
bonsoir ,
malgré les lectures indiquées sur format, je n'y suis pas arrivé.

Le pourquoi de l'utilisation de ce bulk insert est lié àSql Express qui n'a
pas les options d'importation comme dans la version std.

Cependant à force de chercher j'ai fini par trouver sur la version de sql
express que je possede l'outil d'importation "dtswizard" à l'adresse
C:Program FilesMicrosoft SQL Server90DTSBinn . et qui permet d'impoter
un fichier text "flat file'
la version de sql Express que j'utilise est "Microsoft SQL Server
Management Studio Express 9.00.3042.00 " version Advanced

cela a réglé mon problème.

Philippe


"Jean-Pierre Riehl" a écrit dans le message de
news:
Bonjour,

Tu dois utiliser l'option FORMATFILE pour préciser les colonnes que tu
importes du fichier.

BULK INSERT [résidences]
FROM 'c:data.txt'
WITH (
FORMATFILE='c:format.fmt')

avec dans le fichier format :

------
9.0
1
1 SQLCHAR 0 0 "rn" 1 col1 "<collation>"
------

Consultes "BULK INSERT - format files" dans l'aide de SQL Server pour plus
de détails.


--
Jean-Pierre Riehl
http://www.blog.djeepy1.net
http://www.bewise.fr


"Philippe" wrote in message
news:
bonjour à tous,

je patine sur l'utilisation de bulk insert à partir d'un fichier txt ,
voilà mon problème:

j'ai créé une table:
/****** Objet : Table [dbo].[Résidences] Date de génération du script :
01/14/2008 17:03:04 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[Résidences]') AND type in (N'U'))
DROP TABLE [dbo].[Résidences]
GO
CREATE TABLE [dbo].[Résidences](
[résidence] [nvarchar](64) NOT NULL,
[résidenceId] [bigint] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Résidences_1] PRIMARY KEY CLUSTERED
([résidenceId] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Objet : Index [IX_Résidences] Date de génération du script :
01/14/2008 16:41:35 ******/
CREATE NONCLUSTERED INDEX [IX_Résidences] ON [dbo].[Résidences]
([résidence] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO


le contenu du fichier TXT : BAB Résidences.txt est le suivant :
IIIIIIIIIIII I I
IIII IIIIIII I
1929
2
2 MAISONS

chaque ligne se termine par CRLF
Je n'ai pas de caractère de split particulier si ce n'est la fin de
chaque ligne

j'ai essayé :
BULK INSERT cabab.dbo.Résidences
FROM 'D:BAB Résidences.txt'
WITH (
FIELDTERMINATOR = 'n',
ROWTERMINATOR = 'n'
)
GO

j'obtiens tout en erreur :
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 1, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 3, colonne 2 (résidenceId).
Msg 4864, Niveau 16, État 1, Ligne 1
Erreur de conversion des données à charger en bloc (incompatibilité de
type ou caractère non valide pour la page de codes spécifiée) pour la
ligne 4, colonne 2 (résidenceId).
etc...

Quelle(s) caractère(s) dois je indiquer pour charger la table?? , le
contenu d'une ligne du fichier texte (hors CRLF) alimente la colonne
"Résidence" de la table

D'avance merci
Philippe