Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2011, 10h47   #1
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 357
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 357
Points : 2 063
Points : 2 063
Par défaut Export de données - Auto-incrémente

Bonjour !

Je viens vers vours car une quesiton me turlupine, et je ne trouve pas la réponse sur le net...

La version courte :
J'utilise SQLServer 2008, et j'utilise SSMS pour faire des exports de données.
Pas de soucis, en configurant l'export, j'exporte bien les données, les tables si besoin etc... sauf que, ça m'exporte également l'ID de la table, qui est un auto-incrémente.

Exemple :
Code T-SQL :
1
2
3
4
 
SET IDENTITY_INSERT [coc].[T_G61_CNIT] ON
INSERT [schema].[SSA_TABLE] ([SSA_TABLE_ID], [SSA_TABLE_COL1], [SSA_TABLE_COL2], [SSA_TABLE_COL3], [SSA_TABLE_COL4]) VALUES (1278, N'BLABLALBA', N'BLABLA', N'BLABLA', CAST(0x97340B00 AS Date))
SET IDENTITY_INSERT [coc].[T_G61_CNIT] OFF

Or, le but de cet export est de pouvoir importer dans une base (similaire) qui a des données potentiellement différentes.
Je veux donc pouvoir utiliser l'auto-incrémente de la base cible.

Pour cela, il faudrait que mon export ressemble à ça :
Code T-SQL :
1
2
 
INSERT [schema].[SSA_TABLE] ([SSA_TABLE_COL1], [SSA_TABLE_COL2], [SSA_TABLE_COL3], [SSA_TABLE_COL4]) VALUES (N'BLABLALBA', N'BLABLA', N'BLABLA', CAST(0x97340B00 AS Date))

Et malheureusement, je ne vois pas comment paramétrer SSMS pour arriver à ce résultat. Est-ce possible en ligne de commande ? Est-ce tout bêtement impossible ?

Merci d'avance !
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

-- Chuck Palahniuk, Fight Club, Chapter 3 --
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 11h19   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
As-tu essayer ceci ?

Code :
1
2
3
4
INSERT [BaseCible].[schema].[SSA_TABLE] ([SSA_TABLE_COL1], [SSA_TABLE_COL2], [SSA_TABLE_COL3], [SSA_TABLE_COL4])
 
SELECT [SSA_TABLE_COL1], [SSA_TABLE_COL2], [SSA_TABLE_COL3], [SSA_TABLE_COL4] 
FROM [BaseSource].[schema].[SSA_TABLE]
je suppose que les noms des tables et des colonnes sont identiques dans les 2 bases.
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 12h09   #3
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 357
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 357
Points : 2 063
Points : 2 063
On passe par un export/import car on n'a pas de connexion possible entre les deux bases (sinon on pourrait faire un export directement, auquel cas on peut paramétrer l'auto-incrémente).
En gros, l'une est dans le "bac à sable", l'autre est sur un serveur avec accès limité, et pas dans le même pays, zone de sécurité différente, etc..

Du coup je ne pourrais pas utiliser cette méthode non plus.

Merci quand même, car je ne connaissais pas, ça me servira sûrement un jour !
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

-- Chuck Palahniuk, Fight Club, Chapter 3 --
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 13h58   #4
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 611
Points : 1 611
Une approche possible:
Chargez votre fichier dans une table temporaire localisee sur votre serveur/DB de destination et realisez un insert dans votre table finale comme decrit par zinzineti.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 14h00   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Si votre table destination possède aussi un auto incrément, il n'y aura aucun problème lors de l'intégration des données. L'auto incrément est ignoré par les commandes BCP.exe et par BULK INSERT, à moins que vous ne spécifiez explicitement KEEP IDENTITY.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 14h55   #6
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 357
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 357
Points : 2 063
Points : 2 063
Citation:
Envoyé par Ptit_Dje Voir le message
Une approche possible:
Chargez votre fichier dans une table temporaire localisee sur votre serveur/DB de destination et realisez un insert dans votre table finale comme decrit par zinzineti.
Merci pour cette piste, a priori cela serait faisable.

Citation:
Envoyé par SQLpro
Si votre table destination possède aussi un auto incrément, il n'y aura aucun problème lors de l'intégration des données. L'auto incrément est ignoré par les commandes BCP.exe et par BULK INSERT, à moins que vous ne spécifiez explicitement KEEP IDENTITY.
Pas sûr qu'on puisse utiliser BCP dans l'environnement en question, mais dans le doute je vais essayer.
Pour info, mes commandes :

Code :
bcp base.schema.SSA_TABLE out C:\Temp\test.dat -N -UuserName -S SERVER\INSTANCE
Code T-SQL :
1
2
3
4
5
6
7
8
9
10
 
USE INSTANCE
 
GO
BULK INSERT schema.SSA_TABLE
    FROM 'C:\Temp\test.dat' 
   WITH (DATAFILETYPE='widenative'); 
GO
SELECT [SSA_TABLE_COL1],[SSA_TABLE_COL2],[SSA_TABLE_COL3],[CNISSA_TABLE_COL4] FROM schema.SSA_TABLE;
GO

Merci à vous !
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

-- Chuck Palahniuk, Fight Club, Chapter 3 --
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h58.


 
 
 
 
Partenaires

Hébergement Web