Je rencontre un problème étrange, et j'ai besoin d'aide pour essayer de le comprendre.Sql Server 2005 violation de clé primaire sur une colonne d'identité
J'ai une base de données qui a une colonne ID (définie comme int null, Identity, commence à 1, incrémente de 1) en plus de toutes les colonnes de données d'application. La clé primaire de la table est la colonne ID, pas d'autres composants.
Il n'y a pas d'ensemble de données que je puisse utiliser en tant que «clé primaire naturelle» puisque l'application doit permettre plusieurs soumissions de données identiques.
je une procédure stockée, qui est la seule façon d'ajouter de nouveaux enregistrements dans la table (autres que la connexion au serveur directement en tant que propriétaire db)
Alors que QA testait l'application ce matin, ils à entrer un nouvel enregistrement dans la base de données (en utilisant l'application comme il était prévu, et comme ils l'ont fait pendant les deux dernières semaines) et a rencontré une violation de clé primaire sur cette table.
C'est de la même manière que je fais les clefs primaires depuis environ 10 ans maintenant, et n'ai jamais couru à travers ceci.
Des idées pour résoudre ce problème? Ou est-ce un de ces problèmes de rayons cosmiques qui apparaissent une fois de temps en temps.
Merci pour tout conseil que vous pouvez donner.
Nigel
Edité à 13h15 HAE 12 Juin pour donner plus d'informations
Une version simplifiée du schéma ...
CREATE TABLE [dbo].[tbl_Queries](
[QueryID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[Address] [varchar](150) NOT NULL,
[Apt#] [varchar](10) NOT NULL
... <12 other columns deleted for brevity>
[VersionCode] [timestamp] NOT NULL,
CONSTRAINT [PK_tbl_Queries] PRIMARY KEY CLUSTERED
(
[QueryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
(également supprimé les déclarations de valeur par défaut) La procédure stockée est la suivante:
insert into dbo.tbl_Queries
( FirstName,
LastName,
[Address],
[Apt#]...) values
( @firstName,
@lastName,
@address,
isnull(@apt, ''), ...)
Il ne regarde même pas la colonne d'identité, n'utilise pas IDENTITY, @@ scope_identity ou quelque chose de similaire, c'est juste un fichier et oubliez.
Je suis aussi confiant que possible que la valeur d'identité n'a pas été réinitialisée et que personne d'autre n'utilise l'accès direct à la base de données pour entrer des valeurs. La seule fois dans ce projet que l'insertion d'identité est utilisée est dans le déploiement de base de données initiale pour définir des valeurs spécifiques dans les tables de recherche.
L'équipe de contrôle qualité a réessayé après avoir reçu l'erreur et a réussi à soumettre une requête. Depuis, elle tente de la reproduire et n'a pas réussi jusqu'à présent.
J'apprécie vraiment les idées des gens.
Hmmm ... est-il possible de coller un schéma de table aseptisé et/ou l'instruction d'insertion incriminée? – ristonj
Êtes-vous toujours incapable d'ajouter de nouveaux enregistrements, ou est-ce que cela ne s'est produit qu'une seule fois? –
vérifier ma réponse ci-dessous Nigel ... – Eric