我尝试创建存储过程时将值插入到两个表tblAirport
和tblCountry
中。 tblAirport
有一个引用tblCountry
的FK,我想使用tblCountry
中FK的值将值插入tblAirport
。我是SQL的新手,我认为我必须使用SCOPE_IDENTITY()
函数来实现这一点,但我不确定如何实现它。这些是我的表格;
tblAirport
PK INT IDENTITY(1,1),
geoLocation GEOGRAPHY,
ICAOCode VARCHAR(4),
IATACode VARCHAR(3),
strName VARCHAR(MAX),
strCity VARCHAR(MAX),
strCountry VARCHAR(MAX),
degLat DECIMAL(7,2),
minLat DECIMAL(7,2),
secLat DECIMAL(7,2),
Equator VARCHAR(1),
degLong DECIMAL(7,2),
minLong DECIMAL(7,2),
secLong DECIMAL(7,2),
Meridian VARCHAR(1),
strElevation VARCHAR(5),
FKCountry INT NULL
tblCountry
PK INT IDENTITY(1,1),
strCountry VARCHAR(MAX)
这就是我的存储过程
CREATE PROCEDURE [dbo].spInsertAirport
@ICAOCode VARCHAR(4),
@IATACode VARCHAR(3),
@strName VARCHAR(MAX),
@strCity VARCHAR(MAX),
@strCountry VARCHAR(MAX),
@degLat DECIMAL(7,2),
@minLat DECIMAL(7,2),
@secLat DECIMAL(7,2),
@Equator VARCHAR(1),
@degLong DECIMAL(7,2),
@minLong DECIMAL(7,2),
@secLong DECIMAL(7,2),
@Meridian VARCHAR(1),
@strElevation VARCHAR(5),
@FKCountry INT
AS
BEGIN TRANSACTION
BEGIN TRY
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
INSERT INTO tblAirport (ICAOCode, IATACode, strName, strCity, strCountry,
degLat, minLat, secLat, Equator,
degLong, minLong, secLong, Meridian, strElevation)
VALUES (@IATACode, @strName, @strCity, @strCountry,
@degLat, @minLat, @secLat, @Equator,
@degLong, @minLong, @secLong, @Meridian, @strElevation)
我不知道如何将国家/地区插入tblCountry
表格;任何帮助都很棒
答案 0 :(得分:0)
您不需要scope_identity。
检查您的tblCountry以查看@strCountry
是否已有一行。如果没有,则为其插入一个新行。
然后更新tblAirport,将FKCountry
设置为PK
上匹配的行的strCountry
值。
您也可以在插入过程中执行此操作,而不是使用更新,但听起来您处于非常初级的水平,因此可能只需采用这种更简单的方法进行此分配。