Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 10/11/2011, 18h16   #1
Membre du Club
 
Inscription : mars 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 112
Points : 58
Points : 58
Par défaut SQL Server : Rowversion/Timestamp

Bonjour,

J'ai un soucis d'insertion de données que je ne trouve pas la solution et je ne sais plus quoi faire

Ci-dessous la structure de la table cible (réduite):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
/* Table d'un logiciel tiers qu'on utilise en production */
CREATE TABLE [dbo].[ADRESSE](
	[ADRESSE_NR] [decimal](10, 0) NOT NULL,
	[NAME] [varchar](32) NULL,
	..
	[ROWVERSION] [timestamp] NOT NULL,
 CONSTRAINT [XPKADRESSE] PRIMARY KEY NONCLUSTERED 
(
	[ADRESSE_NR] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
La requête d'insertion (la table ADRESSE_TMP n'a pas le champ Timestamp):
Code :
1
2
3
4
5
6
INSERT INTO dbo.[ADRESSE]
	([ADRESSE_NR], [NAME])
SELECT [ADRESSE_NR] ,[NAME] 
	FROM dbo.[ADRESSE_TMP]
	WHERE [ADRESSE_NR] BETWEEN 71010000 AND 71019999
		AND [ADRESSE_NR] NOT IN (SELECT [ADRESSE_NR] FROM dbo.[ADRESSE])
Je reçois l'erreur suivante à chaque tentative:
Citation:
Msg*2601, Niveau*14, État*1, Ligne*2
Cannot insert duplicate key row in object 'dbo.ADRESSE' with unique index 'XAK1ADRESSE'.
The statement has been terminated.
Je pense que le problème vient de Rowversion\Timestamp;
- SELECT @@DBTS m'affiche : 0x00000000011F1CCA
- PRINT MIN_ACTIVE_ROWVERSION() m'affiche : 0x00000000011F1CCB
- SELECT MAX(ROWVERSION) FROM dbo.[ADRESSE] m'affiche : 0x00000000011EF439


Questions:
- Est-ce que le problème est provoqué du faite que la valeur de MAX(ROWVERSION) : 0x00000000011EF439 soit inférieure de la valeur MIN_ACTIVE_ROWVERSION() : 0x00000000011F1CCB

- Est-il possible de déterminer la valeur initiale de Timestamp dans la base de données, par exemple "0x00000000011F1CCB"?

Je suis complètement perdu et j'espère avoir ici quelques éclaircissement!

Merci d'avance de votre aide.
emaluk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 18h35   #2
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
TIMESTAMP est un type de données qui ne doit plus être utilisé dans SQL Server. Son remplaçant est le type ROWVERSION.
Évitez d'utiliser un mot réservé comme ROWVERSION comme non de colonne. ROWVERSION est un type de données.
Bref, vous mélangez tout et n'importe quoi...

Que voulez-vous faire ?

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 11/11/2011, 09h59   #3
Membre du Club
 
Inscription : mars 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 112
Points : 58
Points : 58
Bonjour,

Merci de votre réponse, je dois importer les données dans cette bd d'une application (qui date déjà de quelques années depuis SQL Server 7 et SQLBase 6) développée par une maison externe, malheureusement je ne peux pas modifier son structure, je ne peux qu'intervenir au niveau de données.

J'aimerai tous simplement importé les données d'une table x vers une de tables de cette bd, actuellement elle est sur SQL Server 2005.

Merci encore. A+
emaluk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 10h28   #4
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
Quelle est la structure EXACTE de la table de destination ?

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 11/11/2011, 10h39   #5
Membre du Club
 
Inscription : mars 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 112
Points : 58
Points : 58
La structure de la table de destination est celle-ci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
CREATE TABLE [dbo].[ADRESSE](
	[ADRESSE_NR] [decimal](10, 0) NOT NULL,
	[NAME] [varchar](32) NULL,
	[VORNAME] [varchar](32) NULL,
	[KURZNAME] [varchar](16) NULL,
	[TITEL] [varchar](32) NULL,
	[ADR1] [varchar](32) NULL,
	[ADR2] [varchar](32) NULL,
	[ADR3] [varchar](32) NULL,
	[PLZ] [varchar](10) NULL,
	[ORT] [varchar](32) NULL,
	[LAND_ID] [varchar](3) NULL,
	[TELEFON1] [varchar](20) NULL,
	[TELEFON2] [varchar](20) NULL,
	[NATEL] [varchar](20) NULL,
	[TELEFAX] [varchar](20) NULL,
	[TELEX] [varchar](20) NULL,
	[EMAIL] [varchar](80) NULL,
	[INTERNET] [varchar](80) NULL,
	[PTELEFON1] [varchar](20) NULL,
	[PTELEFON2] [varchar](20) NULL,
	[PNATEL] [varchar](20) NULL,
	[PTELEFAX] [varchar](20) NULL,
	[PEMAIL] [varchar](80) NULL,
	[PINTERNET] [varchar](80) NULL,
	[ADRTYP_SCNR] [smallint] NULL,
	[SPRACHE_NR] [smallint] NULL,
	[ANREDE_NR] [smallint] NULL,
	[ANREDENAME] [varchar](32) NULL,
	[INFO] [smallint] NULL,
	[AHV] [varchar](20) NULL,
	[NOTIZ] [text] NULL,
	[LV] [smallint] NULL,
	[GEBDATUM] [datetime] NULL,
	[GEBTAG] [smallint] NULL,
	[GEBMONAT_SCNR] [smallint] NULL,
	[GEBJAHR] [smallint] NULL,
	[MUTMIT_NR] [smallint] NULL,
	[KONTAKTNZUS_SCNR] [smallint] NULL,
	[GEBGESCHENK_UCNR] [int] NULL,
	[RECHTSFORM_UCNR] [int] NULL,
	[WEIHGESCHENK_UCNR] [int] NULL,
	[ZUSMIT1_NR] [int] NULL,
	[ZUSMIT2_NR] [int] NULL,
	[ZUSMIT3_NR] [int] NULL,
	[CDATE] [datetime] NOT NULL CONSTRAINT [DF_ADRESSE_CDATE] DEFAULT (getdate()),
	[CUSER] [smallint] NOT NULL,
	[MDATE] [datetime] NULL,
	[MUSER] [smallint] NULL,
	[ROWVERSION] [timestamp] NOT NULL,
 CONSTRAINT [XPKADRESSE] PRIMARY KEY NONCLUSTERED 
(
	[ADRESSE_NR] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
emaluk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 18h51   #6
Membre du Club
 
Inscription : mars 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 112
Points : 58
Points : 58
Je viens d'identifier le problème, l'erreur ne venait pas du champ rowversion mais dans l'un de champs qui me semble être un champ unique et recevait plusieurs valeurs NULL, en regardant la structure de cette table je ne vois pas à quel niveau la contrainte UNIQUE est déclarée... Au tant pour moi!

Merci encore à tous.
emaluk 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 06h39.


 
 
 
 
Partenaires

Hébergement Web