Discussion:
Foreign Key Problem bei MS SQL Server
(zu alt für eine Antwort)
Sebastian K.
2006-06-13 14:51:04 UTC
Permalink
Hallo zusammen,

ich versuche mich gerade im VisualStudio 2005 ein wenig mit
Datenbanken und hinterher auch DataBinding etc... Jedoch stoße ich
bereits beim Design bzw. Füllen der DB auf eine Frage/ein Problem.
Sachstand:

Ich habe 2 Tabellen die in Relation zueinander stehen. Tab1 hat ein
Feld als PK und ein Feld als Bezeichnung. Tab2 hat natürlich auch
einen PK + 2 Felder für Bezeichnung und Datum und ein Feld, in dem der
Wert aus Tab1 als Fremdschlüssel gespeichert wird.

Soweit konnte ich bereits je 3 Datensätze in Tab1 und Tab2 anfügen,
sobald ich aber versuche einen vierten in Tab2 anzulegen gibts mecker.
Er beschwert sich über meine gesetzte Beziehung. Den Fehler bekomme
ich weg, wenn ich in der Beziehung die Option
"Fremdschlüsseleinschränkung erzwingen" von "Ja" auf "Nein" ändere.

Mich interessiert nun brennend, was das überhaupt bedeuten soll. Dr.
Google weiß leider auch keinen Rat und bin für jegliche Hilfe sehr
dankbar.

Gruß
gigi`
Markus Schertler
2006-06-13 16:47:06 UTC
Permalink
Hallo Sebastian,

also der Foreign Key in Tab 2 bedeutet das der Wert ein bereits vorhandener PK aus Tab 1 sein muss.
Ist dies beim 4. Satz der Fall?

Markus
Sebastian K.
2006-06-14 09:03:39 UTC
Permalink
Post by Markus Schertler
Hallo Sebastian,
also der Foreign Key in Tab 2 bedeutet das der Wert ein bereits vorhandener PK aus Tab 1 sein muss.
Ist dies beim 4. Satz der Fall?
Markus
Hallo Markus.

Ja durchaus, beim 4. Datensatz ist es egal ob ich dort 1, 2 oder 3
eintrage, es kommt immerwieder die gleiche Fehlermeldung.

Das merkwürdige ist auch, ich kann in meinen bereits 3 vorhandenen
Datensätzen in das FK Feld auch eine ID reinschreiben, die garnicht in
der Tab1 vorhanden ist. I. d. R. sollte ja sowas nicht möglich sein...

Ich habe auch mal spaßeshalber in die Tab1 einen 4. Datensatz
hinzugefügt um zu schauen, ob ich in Tab2 dann auch einen 4. anlegen
kann, wenn die Option "Fremdschlüsseleinschränkungen erzwingen"
aktiviert ist. Negativ :p

Weitere Ideen/Fragen?

Gruß
Sebastian
Markus Schertler
2006-06-14 10:47:17 UTC
Permalink
Hallo Sebastian,

vielleicht ist irgendetwas in der Definition des Foreign Keys falsch.

Habe versucht, das Beispiel in meiner SQL Server Express Testdatenbank nachzuvollziehen.
Mit dem SQL Server Management Studio. Geht dort einwandfrei.
Ich kann nur Sätze in Table_2 einfügen für die ein PK in Table_1 existiert.

Online steht dazu hier noch etwas:
http://msdn2.microsoft.com/en-us/library/ms177463.aspx

Grüsse,
Markus

1. Table_1

CREATE TABLE [dbo].[Table_1](
[PK] [numeric](18, 0) NOT NULL,
[Bezeichung] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[PK] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]



2. Table_2

CREATE TABLE [dbo].[Table_2](
[PK] [numeric](18, 0) NOT NULL,
[Bezeichnung] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Datum] [smalldatetime] NOT NULL,
[Table_1_PK] [numeric](18, 0) NOT NULL,
CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED
(
[PK] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]



3. Foreign Key
Im Management Studio unter Table_2 / Keys / New Foreign Key
dort Tables and Columns Specification ausfüllen.

GO
ALTER TABLE [dbo].[Table_2] WITH CHECK ADD CONSTRAINT [FK_Table_2_Table_1] FOREIGN KEY([Table_1_PK])
REFERENCES [dbo].[Table_1] ([PK])
GO
ALTER TABLE [dbo].[Table_2] CHECK CONSTRAINT [FK_Table_2_Table_1]
Sebastian K.
2006-06-14 12:10:43 UTC
Permalink
Post by Markus Schertler
Hallo Sebastian,
vielleicht ist irgendetwas in der Definition des Foreign Keys falsch.
Habe versucht, das Beispiel in meiner SQL Server Express Testdatenbank nachzuvollziehen.
Mit dem SQL Server Management Studio. Geht dort einwandfrei.
Ich kann nur Sätze in Table_2 einfügen für die ein PK in Table_1 existiert.
http://msdn2.microsoft.com/en-us/library/ms177463.aspx
Grüsse,
Markus
1. Table_1
CREATE TABLE [dbo].[Table_1](
[PK] [numeric](18, 0) NOT NULL,
[Bezeichung] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[PK] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
2. Table_2
CREATE TABLE [dbo].[Table_2](
[PK] [numeric](18, 0) NOT NULL,
[Bezeichnung] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Datum] [smalldatetime] NOT NULL,
[Table_1_PK] [numeric](18, 0) NOT NULL,
CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED
(
[PK] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
3. Foreign Key
Im Management Studio unter Table_2 / Keys / New Foreign Key
dort Tables and Columns Specification ausfüllen.
GO
ALTER TABLE [dbo].[Table_2] WITH CHECK ADD CONSTRAINT [FK_Table_2_Table_1] FOREIGN KEY([Table_1_PK])
REFERENCES [dbo].[Table_1] ([PK])
GO
ALTER TABLE [dbo].[Table_2] CHECK CONSTRAINT [FK_Table_2_Table_1]
Hallo Markus,

du hattest Recht. Es lag wohl an einer fehlerhaften FK Definition. Ich
habe die DB auch im Visual Studio selbst designed, vielleicht habe ich
hierbei etwas übersehen/falsch gemacht. Erst später bin ich auf das
Microsoft SQL Server Management Studio gekommen, da wars aber
anscheinend schon zu spät :p und so habe ich damit einfach eine
komplett neue DB erstellt.

Problem ist gelöst und ich kann weitermachen an dem Ding :). Danke
vielmals.

Gruß
Sebastian

Loading...