存储过程和scope_identity()sql



我正在尝试创建一个存储过程,将值插入两个表tblAirporttblCountrytblAirport具有引用tblCountry的FK,我想使用tblAirport中FK的值将值插入tblCountry。我是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表中;任何帮助都很棒

您不需要scope_identity。

检查您的tblcountry,以查看@strCountry是否已经有一行。如果没有,请为其插入一行。

然后更新tblairport,将FKCountry设置为与strCountry上匹配的行的PK的值。

您也可以在插入期间而不是使用更新时执行此操作,但是听起来您的初学者级别,所以也许只采用这种更简单的方法来完成此任务。

相关内容

  • 没有找到相关文章

最新更新