Error With Simple Script
-
I'm trying to create a small sample database. Towards the bottom when I', inserting Book3, I suddenly get an FK violation from Books into Categories. Yet the caregory id is there. Can someone try thnis and tell me wtf is wrong????
USE master
IF EXISTS(SELECT * FROM sys.databases WHERE Name = 'BookCatalog')
DROP DATABASE BookCatalog
Go
CREATE DATABASE BookCatalog
GO
USE [BookCatalog]
GOCREATE TABLE [dbo].[BookCategories]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL,
)CREATE TABLE [dbo].[Books]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Category] [INT] NULL FOREIGN KEY (Id) REFERENCES BookCategories(Id),
[Title] VARCHAR(MAX) NOT NULL,
[Price] MONEY NULL
)CREATE TABLE [dbo].[Authors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL,
)CREATE TABLE [dbo].[BookAuthors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Book] [INT] NULL FOREIGN KEY (Id) REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY (Id) REFERENCES Authors(Id),
)GO
USE [BookCatalog]-- Book Categories
DECLARE @CategoryId1 INT
INSERT INTO BookCategories (Name) VALUES ('C#')
SET @CategoryId1 = SCOPE_IDENTITY()DECLARE @CategoryId2 INT
INSERT INTO BookCategories (Name) VALUES ('Programming Practices')
SET @CategoryId2 = SCOPE_IDENTITY()-- Authors
DECLARE @MartinId INT
INSERT INTO Authors (Name) VALUES ('Bob Martin')
SET @MartinId = SCOPE_IDENTITY()DECLARE @Albahari1Id INT
INSERT INTO Authors (Name) VALUES ('Joseph Albahari')
SET @Albahari1Id = SCOPE_IDENTITY()DECLARE @Albahari2Id INT
INSERT INTO Authors (Name) VALUES ('Ben Albahari')
SET @Albahari2Id = SCOPE_IDENTITY()DECLARE @WagnerId INT
INSERT INTO Authors (Name) VALUES ('Bill Wagner')
SET @WagnerId = SCOPE_IDENTITY()DECLARE @SkeetId INT
INSERT INTO Authors (Name) VALUES ('Jon Skeet')
SET @SkeetId = SCOPE_IDENTITY()-- Books
DECLARE @BookId1 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId1, 'Agile Principles, Patterns, and Practices in C#', 64.99)
SET @BookId1 = SCOPE_IDENTITY()DECLARE @BookId2 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2, 'C# 3.0 in a Nutshell', 34.99)
SET @BookId2 = SCOPE_IDENTITY()DECLARE @BookId3 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2, 'C# Core Langaue: Little Black Book', 20.00)
SET @BookId3 = SCOPE_IDENTITY()DECLARE @BookId4 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2 -
I'm trying to create a small sample database. Towards the bottom when I', inserting Book3, I suddenly get an FK violation from Books into Categories. Yet the caregory id is there. Can someone try thnis and tell me wtf is wrong????
USE master
IF EXISTS(SELECT * FROM sys.databases WHERE Name = 'BookCatalog')
DROP DATABASE BookCatalog
Go
CREATE DATABASE BookCatalog
GO
USE [BookCatalog]
GOCREATE TABLE [dbo].[BookCategories]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL,
)CREATE TABLE [dbo].[Books]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Category] [INT] NULL FOREIGN KEY (Id) REFERENCES BookCategories(Id),
[Title] VARCHAR(MAX) NOT NULL,
[Price] MONEY NULL
)CREATE TABLE [dbo].[Authors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL,
)CREATE TABLE [dbo].[BookAuthors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Book] [INT] NULL FOREIGN KEY (Id) REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY (Id) REFERENCES Authors(Id),
)GO
USE [BookCatalog]-- Book Categories
DECLARE @CategoryId1 INT
INSERT INTO BookCategories (Name) VALUES ('C#')
SET @CategoryId1 = SCOPE_IDENTITY()DECLARE @CategoryId2 INT
INSERT INTO BookCategories (Name) VALUES ('Programming Practices')
SET @CategoryId2 = SCOPE_IDENTITY()-- Authors
DECLARE @MartinId INT
INSERT INTO Authors (Name) VALUES ('Bob Martin')
SET @MartinId = SCOPE_IDENTITY()DECLARE @Albahari1Id INT
INSERT INTO Authors (Name) VALUES ('Joseph Albahari')
SET @Albahari1Id = SCOPE_IDENTITY()DECLARE @Albahari2Id INT
INSERT INTO Authors (Name) VALUES ('Ben Albahari')
SET @Albahari2Id = SCOPE_IDENTITY()DECLARE @WagnerId INT
INSERT INTO Authors (Name) VALUES ('Bill Wagner')
SET @WagnerId = SCOPE_IDENTITY()DECLARE @SkeetId INT
INSERT INTO Authors (Name) VALUES ('Jon Skeet')
SET @SkeetId = SCOPE_IDENTITY()-- Books
DECLARE @BookId1 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId1, 'Agile Principles, Patterns, and Practices in C#', 64.99)
SET @BookId1 = SCOPE_IDENTITY()DECLARE @BookId2 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2, 'C# 3.0 in a Nutshell', 34.99)
SET @BookId2 = SCOPE_IDENTITY()DECLARE @BookId3 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2, 'C# Core Langaue: Little Black Book', 20.00)
SET @BookId3 = SCOPE_IDENTITY()DECLARE @BookId4 INT
INSERT INTO Books (Category, Title, Price) VALUES (@CategoryId2Quote:
...
[Category] [INT] NULL FOREIGN KEY (Id) REFERENCES BookCategories(Id),
...
[Book] [INT] NULL FOREIGN KEY (Id) REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY (Id) REFERENCES Authors(Id)
...The definition of your foreign keys is wrong. You're saying that the ID of the book must also exist in the
BookCategories
table, and the ID of the book author must exist in both theBooks
andAuthors
tables. Once you fix the FK definitions, the rest of your script will work:CREATE TABLE [dbo].[BookCategories]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL
)CREATE TABLE [dbo].[Books]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Category] [INT] NULL FOREIGN KEY REFERENCES BookCategories(Id),
[Title] VARCHAR(MAX) NOT NULL,
[Price] MONEY NULL
)CREATE TABLE [dbo].[Authors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL
)CREATE TABLE [dbo].[BookAuthors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Book] [INT] NULL FOREIGN KEY REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY REFERENCES Authors(Id)
)
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
Quote:
...
[Category] [INT] NULL FOREIGN KEY (Id) REFERENCES BookCategories(Id),
...
[Book] [INT] NULL FOREIGN KEY (Id) REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY (Id) REFERENCES Authors(Id)
...The definition of your foreign keys is wrong. You're saying that the ID of the book must also exist in the
BookCategories
table, and the ID of the book author must exist in both theBooks
andAuthors
tables. Once you fix the FK definitions, the rest of your script will work:CREATE TABLE [dbo].[BookCategories]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL
)CREATE TABLE [dbo].[Books]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Category] [INT] NULL FOREIGN KEY REFERENCES BookCategories(Id),
[Title] VARCHAR(MAX) NOT NULL,
[Price] MONEY NULL
)CREATE TABLE [dbo].[Authors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] VARCHAR(MAX) NOT NULL
)CREATE TABLE [dbo].[BookAuthors]
(
[Id] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Book] [INT] NULL FOREIGN KEY REFERENCES Books(Id),
[Author] [INT] NULL FOREIGN KEY REFERENCES Authors(Id)
)
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
That did it!! Ya know I stared at this for an hour. I'm an idiot. Thanks!
If it's not broken, fix it until it is. Everything makes sense in someone's mind. Ya can't fix stupid.