SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

進化したSQL Server 2012の新機能紹介

SQL Server開発の利便性を向上させるFileTable/シーケンスオブジェクト/ページング機能

進化したSQL Server 2012の新機能紹介(4)

テーブルから独立した採番用オブジェクトがついに登場

 SQL Server 2012では、定義したルールに従って採番をするシーケンスオブジェクトが提供されています(注2)。テーブルプロパティで提供される採番用のIDENTITYと同じような機能です。

 シーケンスオブジェクトとIDENTITYとの違いは、前者はテーブルから独立したオブジェクトであり、後者はテーブルの属性という点です。テーブルから独立したシーケンスオブジェクトは、ストアドプロシージャで利用できたり、テーブルのデフォルト値として、「シーケンスオブジェクトと任意の文字列」のような指定ができます。IDENTITYが設定された列は数字しか入力できませんが、シーケンスオブジェクトを使用すれば、「user0001」のような形式で採番できます。

注2

 シーケンスはSQLの標準規格であるSQL:2003で規定されたもので、すでにOracleやPostgreSQLでは提供されていました。

シーケンスオブジェクトの作成

 シーケンスオブジェクトを作成する方法として、Management Studioで実施する方法とT-SQLを実行する方法があります。T-SQLを実行する場合は、リスト3のようなクエリを実行します。

 1)T-SQLを利用する方法

 CREATE SEQUENCE命令を利用します。リスト3は、125から採番を開始し、25ずつ増分し、最大値200に到達すると、巡回し最小値100から再度25ずつ採番していくシーケンスオブジェクトを作成します。

[リスト3]シーケンスオブジェクトを作成するスクリプト
CREATE SEQUENCE TestSeq
    AS int--シーケンスのデータ型
    START WITH 125--採番を始める数字
    INCREMENT BY 25 --次の採番時の増分値
    MINVALUE 100--最小値
    MAXVALUE 200--最大値
    CYCLE --最大値を超過した場合に、例外にするか最小値から再採番するかの指定
    CACHE
GO

 シーケンスに使用できるデータ型には、tinyint、smallint、int、bigint、decimal(整数部のみ)、numeric(整数部のみ)、ユーザー定義データ型の7種類あります。データ型の指定を省略するとbigintが使用されます。シーケンスオブジェクトを使用する際には、必要な採番数を考慮しデータ型を選択します。表2は、それぞれのデータ型の範囲を示したものです。

表2 データ型ごとに使用できる数値範囲
データ型 数値範囲
tinyint 0 ~ 255
smallint -32,768 ~ 32,767
int -2,147,483,648 ~ 2,147,483,647
bigint -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
decimal - 10^38 +1 ~ 10^38 - 1
numeric - 10^38 +1 ~ 10^38 - 1

 CACHEを指定すると、性能向上のために採番時にキャッシュ機能が働きます。既定では、15個キャッシュされます。例えば、クエリ3のシーケンスを初めて使用すると、125、150、175……475までメモリに展開され、475まで採番したとしてシステムテーブルに記録されます。1回で使用する採番番号が15個以上の場合、再度15個メモリにキャッシュされます。

 もし、3つしか採番として使用されなかった場合は、システムテーブルの475を175に更新します。この機能により、まとめて複数採番する際の性能向上を期待できます。

 NO CACHEを指定すると、性能は低下する可能性がありますが、シーケンスが使用されるたびに現在のシーケンス値がシステムテーブルに書き込まれるので、意図しない採番のずれなどが発生しなくなります。

 2)Management Studioを利用する方法

 Management Studioでシーケンスオブジェクトを作成するには、オブジェクトエクスプローラで、[プログラミング]-[シーケンス]を右クリックし、[新しいシーケンス]を選択します。図13のような[新しいシーケンス]ダイアログが開いたら、必要な設定をしてシーケンスオブジェクトを作成します。

図13:画面操作でのシーケンスオブジェクト作成
図13:画面操作でのシーケンスオブジェクト作成

シーケンスオブジェクトの使用例

 シーケンスオブジェクトの使用例は、リスト4のようになります。

[リスト4]シーケンスオブジェクトの使用例
INSERT Test.Orders (ID, PuroductName, Detail)
    VALUES (NEXT VALUE FOR Test.CountBy1, 'コーヒー', 'メーカー製品') ;

DECLARE @NextID int ;
SET @NextID = NEXT VALUE FOR Test.CountBy1;

 「NEXT VALUE FOR」を使用してシーケンスオブジェクトで新し採番ができます。1つ目のクエリでは、INSERTする際に採番をしてテーブルに挿入しています。2つ目のクエリでは、変数に採番した結果を格納しています。

次のページ
データベース側実装によるページング機能

この記事は参考になりましたか?

進化したSQL Server 2012の新機能紹介連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 大和屋 貴仁(ヤマトヤ タカヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6602 2012/06/14 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー