存储过程和Scope_Identity()SQL

问题描述 投票:-2回答:1

我正在尝试创建一个存储过程,将值插入到两个表tblAirporttblCountry中。 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表;任何帮助都很棒

sql sql-server stored-procedures scope-identity
1个回答
0
投票

您不需要scope_identity。

检查你的tblCountry,看看@strCountry是否已经有一行。如果没有,则为其插入新行。

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

您也可以在插入过程中执行此操作而不是使用更新,但听起来您处于初学者级别,因此可能只需采用这种更简单的方法进行此分配。

© www.soinside.com 2019 - 2024. All rights reserved.