2017-12-18 4 views
-2

2つのテーブルに値を挿入するストアドプロシージャを作成しようとしていますtblAirporttblCountryです。 tblAirportにはtblCountryを参照するFKがあり、tblAirportのFKの値を使用してtblCountryに値を挿入したいとします。私はSQLに新しいので、これを達成するためにSCOPE_IDENTITY()関数を使用しなければならないと思いますが、実装方法はわかりません。これらは私のテーブルです。ストアドプロシージャとScope_Identity()SQL

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) 

これは私がtblCountryテーブルに国を挿入する方法がわからない

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) 

私のストアドプロシージャの持っているものです;任意のヘルプは素晴らしいです

+0

'tblAirport'テーブルに' strCountry VARCHAR(MAX) 'があるのはなぜですか?それはあなたの 'tblCountry'テーブルから来るべきです。また、 'tbl'接頭辞を無用にしてしまうことも考慮してください。 – Yuck

+0

これらはすべて代入のスペックです –

答えて

0

あなたはscope_identityは必要ありません。

tblCountryをチェックして、@strCountryの行が既に存在するかどうかを確認します。存在しない場合は、新しい行を挿入します。

次に、tblAirportを更新し、strCountryに一致する行のの値にFKCountryを設定します。

更新を使用する代わりに、挿入中にこれを行うこともできますが、初心者レベルのように聞こえるので、この割り当てを簡単に行うことができます。

+0

tblCountryの意味がわかりませんstrCountryの列がありますが、これはストアドプロシージャを使用してこのテーブルにデータを格納することです。私はストアドプロシージャのtblAirportを挿入するための挿入があり、tblCountryの挿入を行いたいが、tblCountryで使用するtblAirportの国データを入力する。 –

+0

tblCountryのSELECT @strCountryパラメータのPKがすでに存在するかどうかを確認してください。そうすれば、新しいものを挿入する必要があるかどうかを知ることができます。あなたはそれを逆に見ています。 tblCountryから国データを取得して、tblAirportでFKを設定します。その逆ではありません。 –

関連する問題