SQLの最近のブログ記事

Microsoft SQL Server 2005からだったか、INSERTED.(フィールド名)というのが使えるようになっています。

IDENTITYの項目名がidとします。 下記のSQLを実行します。

                        INSERT INTO table_name(hogehoge) 
                        OUTPUT INSERTED.id 
                        VALUE ('hogehoge')

INSERT文によって生成されたidが取得できます。

C#(.NET)でMSSQL Serverを使うときは、SELECTと同じように扱って、値idを取得できます。

MSSQLでも2000までは、以下のIDENT_CURRENT@@IDENTITYSCOPE_IDENTITYというものを知らないといけなかったんですが、新しいバージョンだと不要です。


Transact-SQL リファレンス IDENT_CURRENT

  • IDENT_CURRENT は、任意のセッションと有効範囲内の特定のテーブルに対して生成された最後の ID 値を返します。 
  • @@IDENTITY は、すべての有効範囲を対象に、現在のセッション内の任意のテーブルに対して生成された最後の ID 値を返します。
  • SCOPE_IDENTITY は、現在のセッションと現在の有効範囲内の任意のテーブルに対して生成された最後の ID 値を返します。

 

Microsoft SQL Server 2005にて。

自動でインクリメントする項目は、IDENTITYで設定できるが、1テーブルには1つしかありません。

そこで、そのほかに自動でインクリメントする項目がほしかった場合は、どのようにするのか、調べてみました。

 わりと簡単にMAX+1とかでいいじゃん、って思ったりもしましたが、レコードが0件の時は、成立しません。

0件の時は、初期値がほしいわけです。

それを解決するのが「COALESCE」。

取得した値がnullだったら、○を返す、というようなもの。

すばらしいです。これで、IDENTITYなんか怖くない。ちなみに、COALESCEは、MySQLにもあります。そのほかのDBにもあるとおもいます。

INSERT INTO table_name(id)
SELECT COALESCE(MAX(id)+1,1)
FROM table_name

このアーカイブについて

このページには、過去に書かれたブログ記事のうちSQLカテゴリに属しているものが含まれています。

前のカテゴリはServerです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 5.04

にほんブログ村

にほんブログ村 IT技術ブログへ
にほんブログ村