Generelt skal du undgå danske tegn i dine tabelnavne og navne på databaseobjekter generelt. Ved ikke om det kun er her du har skrevet det med danske tegn eller om det blot er her.
Jeg skal lige være sikker på at jeg har forstået det rigtigt. Du har to tabeller, der er defineret på nedenstående måde.
CREATE TABLE [dbo].[NUMBERS] (
[ORDER_ID] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[NUMBERS] WITH NOCHECK ADD
CONSTRAINT [PK_ORDERS] PRIMARY KEY CLUSTERED
(
[ORDER_ID]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[ORDERS] (
[ORDER_ID] [int] NOT NULL ,
[TEAM_ID] [int] NOT NULL ,
[USER_ID] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ORDERS] WITH NOCHECK ADD
CONSTRAINT [PK_ORDERS1] PRIMARY KEY CLUSTERED
(
[ORDER_ID],
[TEAM_ID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ORDERS] ADD
CONSTRAINT [FK_ORDERS_NUMBERS] FOREIGN KEY
(
[ORDER_ID]
) REFERENCES [dbo].[NUMBERS] (
[ORDER_ID]
)
GO
Herefter skal du først indsætte data i NUMBERS tabellen, da ORDERS tabellen referer til denne og forventer at data i denne eksisterer.
INSERT INTO NUMBERS
SELECT 1
INSERT INTO NUMBERS
SELECT 2
INSERT INTO NUMBERS
SELECT 3
INSERT INTO NUMBERS
SELECT 4
INSERT INTO NUMBERS
SELECT 5
GO
Nu kan du indsætte i ORDERS tabellen forudsat at du vælger et ORDER_ID som eksisterer i NUMBERS tabellen. Herudover er skal du huske at dit TEAM_ID og ORDER_ID er delt primærnøgle. Dvs. du kan oprette et TEAM_ID flere gange, men med forskellig ORDER_ID. Skal dette ikke være tilfældet, så skal du kun bruge TEAM_ID som primærnøgle.
Nedenstående indsætter data i ORDERS tabellen.
-- Indsætter alle ORDER_IDs med TEAM_ID = 1
INSERT INTO ORDERS (ORDER_ID, TEAM_ID, USER_ID)
SELECT ORDER_ID, 1, NULL FROM NUMBERS
GO
-- Indsætter alle ORDER_IDs med TEAM_ID = 2
INSERT INTO ORDERS (ORDER_ID, TEAM_ID, USER_ID)
SELECT ORDER_ID, 2, NULL FROM NUMBERS
GO
-- Indsætter en enkelt række,
-- hvor ORDER_ID = 3 og TEAM_ID = 3
INSERT INTO ORDERS (ORDER_ID, TEAM_ID, USER_ID)
VALUES (3, 3, NULL)
GO
Når du skal hente data fra databasen er det simpelt og gøres blot ved hjælp af en enkelt SELECT sætning, som du kan varierer med en "ORDER" til sidst.
SELECT ORDER_ID, TEAM_ID, USER_ID
FROM ORDERS
ORDER BY ORDER_ID, TEAM_ID
SELECT ORDER_ID, TEAM_ID, USER_ID
FROM ORDERS
ORDER BY TEAM_ID, ORDER_ID
På samme måde kan du hente fra NUMBERS tabellen.
SELECT ORDER_ID
FROM NUMBERS
ORDER BY ORDER_ID
Generelt skal du undgå en direkte binding af dine komponenter i brugergrænsefladen til databasen. Lav i stedet en veldefineret snitflade og brug den i stedet. Det kræver lidt mere arbejde, men det bliver meget mere strukturet og det er væsentlig nemmere at udskifte brugergrænseflade eller databaseudbyder, hvis det skulle blive aktuelt.
Hth
Indlæg senest redigeret d. 01.06.2007 20:39 af Bruger #10448