Store procedure: pre-check for the existence of the foreign key (RegionID) before attempting the insert
1> create table employee( 2> ID int, 3> name nvarchar (10), 4> salary int, 5> start_date datetime, 6> city nvarchar (10), 7> region char (1)) 8> GO 1> 2> insert into employee (ID, name, salary, start_date, city, region) 3> values (1, 'Jason', 40420, '02/01/94', 'New York', 'W') 4> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (2, 'Robert',14420, '01/02/95', 'Vancouver','N') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (4, 'Linda', 40620, '11/04/97', 'New York', 'N') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (5, 'David', 80026, '10/05/98', 'Vancouver','W') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (6, 'James', 70060, '09/06/99', 'Toronto', 'N') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (7, 'Alison',90620, '08/07/00', 'New York', 'W') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (8, 'Chris', 26020, '07/08/01', 'Vancouver','N') 3> GO (1 rows affected) 1> insert into employee (ID, name, salary, start_date, city, region) 2> values (9, 'Mary', 60020, '06/09/02', 'Toronto', 'W') 3> GO (1 rows affected) 1> 2> select * from employee 3> GO ID name salary start_date city region ----------- ---------- ----------- ----------------------- ---------- ------ 1 Jason 40420 1994-02-01 00:00:00.000 New York W 2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N 3 Celia 24020 1996-12-03 00:00:00.000 Toronto W 4 Linda 40620 1997-11-04 00:00:00.000 New York N 5 David 80026 1998-10-05 00:00:00.000 Vancouver W 6 James 70060 1999-09-06 00:00:00.000 Toronto N 7 Alison 90620 2000-08-07 00:00:00.000 New York W 8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N 9 Mary 60020 2002-06-09 00:00:00.000 Toronto W (9 rows affected) 1> 2> --Store procedure: pre-check for the existence of the foreign key (RegionID) before attempting the insert 3> 4> Drop procedure spAdd 5> GO 1> 2> CREATE PROC spAdd @ID nvarchar(20), @City nchar(50), @RegionID nchar(1) 3> AS 4> BEGIN 5> DECLARE @Count INT 6> 7> SELECT @Count = COUNT(*) 8> FROM Employee 9> WHERE Region = @RegionID 10> 11> IF @Count < 1 12> RAISERROR ('RegionID is not valid. Please check your RegionID and try again.', 11, 1) 13> ELSE 14> INSERT INTO Employee (ID, City, Region) 15> VALUES (@ID, @City, @RegionID) 16> END 17> GO 1> 2> EXEC spAdd @ID=99, @City = 'DDD', @RegionID='N' 3> GO (1 rows affected) 1> 2> select * from employee 3> GO ID name salary start_date city region ----------- ---------- ----------- ----------------------- ---------- ------ 1 Jason 40420 1994-02-01 00:00:00.000 New York W 2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N 3 Celia 24020 1996-12-03 00:00:00.000 Toronto W 4 Linda 40620 1997-11-04 00:00:00.000 New York N 5 David 80026 1998-10-05 00:00:00.000 Vancouver W 6 James 70060 1999-09-06 00:00:00.000 Toronto N 7 Alison 90620 2000-08-07 00:00:00.000 New York W 8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N 9 Mary 60020 2002-06-09 00:00:00.000 Toronto W 99 NULL NULL NULL DDD N (10 rows affected) 1> 2> EXEC spAdd @ID=99, @City = 'DDD', @RegionID='A' 3> GO Msg 50000, Level 11, State 1, Server JAVA2S\SQLEXPRESS, Procedure spAdd, Line 12 RegionID is not valid. Please check your RegionID and try again. 1> 2> select * from employee 3> GO ID name salary start_date city region ----------- ---------- ----------- ----------------------- ---------- ------ 1 Jason 40420 1994-02-01 00:00:00.000 New York W 2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N 3 Celia 24020 1996-12-03 00:00:00.000 Toronto W 4 Linda 40620 1997-11-04 00:00:00.000 New York N 5 David 80026 1998-10-05 00:00:00.000 Vancouver W 6 James 70060 1999-09-06 00:00:00.000 Toronto N 7 Alison 90620 2000-08-07 00:00:00.000 New York W 8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N 9 Mary 60020 2002-06-09 00:00:00.000 Toronto W 99 NULL NULL NULL DDD N (10 rows affected) 1> 2> drop table employee 3> GO 1>