SQL Tabellenfeld / Primary Key

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hallöchen,

ich habe eine Tabelle in einem MSSQL Server in der ich Daten importiert habe, mittels Import aus dem Management Studio.
Dabei habe ich für eine Spalte IDs mit gegeben. Nun habe ich das Problem, das sich in meiner Anwendung keine Einträge in dieser Tabelle mehr vornehmen lassen, weil mein Programm der Meinung ist es gäbe einen doppelten Schlüssel.

Ich denke es liegt einfach daran das der Auto increment counter niedriger ist als der letzte Wert in meiner Primary Key Spalte.
Kann ich den internen Zähler der Tabelle verändern?

Hoffe habe mich deutlich genug ausgedrückt.

Freundliche Grüße
 
Hab ich grad auch gefunden, hab unter den falschen Begriffen gesucht. Teste es mal.

Nachtrag:

Funktioniert nicht. Die Tabelle enthält keine Identitätsspalte.

Die Spalte ist als PrimaryKey deklariert, hat aber keine Identifikationsspezifikation. Die Spalte ist vom Typen int.

Ich versuch es einfach mittels INSERT SELECT aus einer temporären Tabelle.

Danke trotzdem für die Hilfe.
 
Zuletzt bearbeitet:
Kein Problem der Befehl gilt auch für MS SQL.
 
Die Identifikationsspezifikation ist der autoincement des PK, das muss also auf ja gesetzt werden und dann kann man noch die Schrittweite und den aktuellen Wert anpassen Letzteres würde das reseed machen.
 
Dein Problem ist doch, dass du die relevante Spalte auf Identifier und auto increment gesetzt hast.
Wenn du jetzt einen Wert mit geben willst, der diese Spalte füllt, dann funktioniert das nicht, da sich das DBMS um die Vergabe und den Autoincrement kümmert. Lässt Du das Autoincrement weg, so kannst du einen Wert angeben, musst aber dafür sorgen, dass es keine doppelten Schlüssel beim Insert Into gibt.

Im zweifel paste mal das Create Table statement aus dem Management Studio, dann schaue ich gerne drüber.

Das reseeden eines Schlüssels setzt nur den Zähler zurück und füllt dann Lücken auf, setzt aber eben auto increment voraus.
 
Das Problem ist, das es sich um eine Webanwendung handelt, die nicht von mir stammt, ich diese aber nutze und dort um die 400 Einträge manuell einlesen muss.

Die Spalte die das betrifft kann ich beim Import manuell füllen, da die Spalte zwar einen PK ist aber keinen Auto increment besitzt.

Nachdem ich das Ganze importiert habe, kann ich allerdings in der Anwendung keinen Datensatz neu anlegen, da dann ein doppelter Schlüssel angemeckert wird. Also gehe ich davon aus das irgendwo in der Anwendung ein Counter sitzt. Die Spalte ist von Datentyp int.
 
Und du verwendest beim zweiten einfügen auch wirklich IDs die es noch nicht gibt in der Tabelle?
 
Jep genau. Es wird ja wunderbar alles importiert.
 
Kann ich mir kaum vorstellen, dass es dann Fehler geben soll. Kannst Du mal die einzelnen Inserts hier pasten plus das CREATE TABLE Statement?
 
Die Inserts kann ich nicht posten, da ich das Ganze per Management Studio importiere aus einer CSV...



Code:
USE [XXXXXXXXXXXXXX]
GO

/****** Object:  Table [dbo].[tdSalesContacts]    Script Date: 22.01.2019 14:36:12 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tdSalesContacts](
    [ContactID] [int] NOT NULL,
    [AddressID] [int] NOT NULL,
    [ContactDate] [datetime] NOT NULL,
    [ContactType] [int] NOT NULL,
    [ContactTopic] [int] NOT NULL,
    [ContactDesc] [nvarchar](100) NOT NULL,
    [ContactDescText] [ntext] NULL,
    [MemoText] [ntext] NULL,
    [UserName] [nvarchar](5) NOT NULL,
    [RepresentativeID] [int] NULL,
    [ContactPartner] [int] NULL,
    [ContactPartnerDesc] [nvarchar](50) NULL,
    [ContactResult] [int] NOT NULL,
    [ResultComment] [ntext] NULL,
    [ResultComment2] [ntext] NULL,
    [ActivityID] [int] NULL,
    [SalesContactERPID] [nvarchar](20) NULL,
    [SalesProject] [int] NULL,
    [ReferenceID] [int] NULL,
    [ReferenceType] [nvarchar](50) NULL,
    [CRMEvent] [int] NULL,
    [ProjectID] [int] NULL,
    [AddressERPID] [nvarchar](20) NULL,
    [AccessFlag] [nvarchar](10) NULL,
    [CreationDate] [datetime] NULL,
    [CreationUser] [nvarchar](5) NULL,
    [ChangeDate] [datetime] NULL,
    [ChangeUser] [nvarchar](5) NULL,
    [OpportunityID] [int] NULL,
    [ReferenceSalesOrderID] [int] NULL,
    [ReferencePurchaseOrderID] [int] NULL,
CONSTRAINT [PK_tdSalesContacts] PRIMARY KEY NONCLUSTERED
(
    [ContactID] 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]
GO

Proble hat sich nun gelöst.... Der Hersteller führt eine eigne Tabelle wo explizit der ID COunter geführt wird.

Danke für eure Hilfe.
 
Zuletzt bearbeitet:
Zurück
Oben