2016-06-17 18 views
1

私はムービーデータベースを持っていますが、このデータベースには列を含む複数のテーブルがあり、新しいムービーにリレーショナルデータを挿入しようとしています。私は、映画をデータベースに入れ、映画が物理的に配置されている特定の店舗を設定する方法を理解しようとしています。特定の映画を検索し、この特定の映画がどの店舗に在庫されているかを調べたい映画レンタルシステムを考えてみましょう。最後のIDを持つリレーショナルデータをSQL Server 2008に挿入

新しいムービーを挿入し、在庫レベルを既存の店舗IDに設定します。私はこの映画を後で検索することができ、各店舗IDで在庫レベルを読み取ることができるはずです。

これは私がこれまで試してみました、私のSQLクエリの一つであり、

BEGIN TRANSACTION 
    INSERT INTO [dbo].[movies] 
      ([titel], [rating], [genre], [releasedatum], 
      [land], [sprak], [DVD_Bluray], [imdb_id]) 
    VALUES 
      ('Resident Evil 2', 4, 'Action', '2016-06-10', 
      'USA', 'Engelska', 'DVD', '123456987') 

SELECT prodID 
FROM dbo.movies 

INSERT INTO dbo.lagerstatus_butiker (butiksid) VALUES (35) 

COMMIT TRANSACTION 

私のテーブルMoviesは、映画に関する情報が含まれ、そして各映画の主キーが自動インクリメントさprodIDで、lagerstatus_butikerです各店舗の在庫レベル。 ButiksidstoreIDであり、「ブチカー」と呼ばれる別のテーブルの主キーです(スウェーデン語でのストア)。一意の主キーIDを持つ複数の店舗があります。

Moviesに新しい行を挿入すると同時に、ストックレベルのある特定のストアに属するようにするにはどうすればよいですか?

私の映画のテーブルには、次のようになります。

[titel] 
[writer] 
[rating] 
[genre] 
[prodID] <--- Primary key 
[releasedatum] 
[land] 
[sprak] 
[DVD_Bluray] 
[imdb_id] 
[director_id] <--- Foreign key 
[butik_id] <--- Foreign key 
[lagerstatus] 
[actorID] <-- Foreign key 

マイlagerstatus(ストックレベル)テーブルには、次のようになります。

[butiksid] <-- Foreign key 
[prodID] <-- Foreign key 
[lagerstatus] 

そして最後に、私のbutiker(店舗)の表は、次のようになります。

[butik_namn] 
[butiksid] <-- Primary key 
[gatuadress] 
[postnr] 
[postort] 
[telnr] 

改良と変更をお気軽にご利用ください。私は努力しています。 gこれをSQL Server 2008で学ぶことができます。これは教育目的のためだけです。

ありがとうございました! :)あなたがIDENTITY列を持つテーブルに行を挿入すると

+0

ムービーの[butik_id]は、その意味は何ですか?また、挿入されていない理由は何ですか? – Serg

+0

ストアドプロシージャを使用しても問題ありませんか? – tgolisch

+0

@tgolischはい、手順を使用しても問題ありません。あなたは良い店を店に持っていますか? –

答えて

1

、あなたはこのようなこと新しく作成されたID値をつかむことができます。

BEGIN TRANSACTION 
    INSERT INTO [dbo].[movies] 
      ([titel], [rating], [genre], [releasedatum], 
      [land], [sprak], [DVD_Bluray], [imdb_id]) 
    VALUES 
      ('Resident Evil 2', 4, 'Action', '2016-06-10', 
      'USA', 'Engelska', 'DVD', '123456987') 

    DECLARE @NewID INT 

    -- get newly created ID 
    SELECT @NewID = SCOPE_IDENTITY(); 

を、今あなたが他のテーブルを埋めるためにそのIDを使用することができます( s):

INSERT INTO dbo.lagerstatus_butiker (butiksid) VALUES (@NewID) 

COMMIT TRANSACTION 
+0

ああ、これは合法的だね。私はDBに戻ったときにこれを試してみるつもりですが、SCOPE_IDENTITYはMySQLのLAST_INSERT_IDに相当しますか? –

+0

@ChristerJohansson:MySQLについてはわからないので、実際にコメントすることはできません。 - 「SCOPE_IDENTITY」は、この現在のスコープに挿入された最後のIDの**値を返します –

関連する問題