2012年4月に出荷予定のSQL Server2012ではSQL文(Transact-SQL)に新しい構文が追加されます。
本記事では、SQL Server2012で新たに追加される新構文の中でも、特に便利な以下の4点を紹介します。
- シーケンス
- 検索結果のページング
- EXECでプロシジャ実行時の結果セット
- 例外処理での再スロー処理
シーケンス
データベース上でデータ一意性を確保するために、一意の連番を振りたい場合があります。この為の機能としてシーケンスが追加されました。
シーケンスというのは、文字通り自動で連番を振る機能で、Oracleでは同じものが既に実装されています。
また、MySQLでは全く同じものではありませんが同様の機能として、AUTO_INCREMENT属性というものが有ります。
シーケンスは、CREATE SEQUENCE句を使用して、以下のSQLで事前に定義する必要があります。
CREATE SEQUENCE seq_item_id AS INT START WITH 1 INCREMENT BY 1 MAXVALUE 10000; |
実際に使用する時は、以下のように”VALUE FOR”で定義したシーケンスを指定します。
INSERT INTO ITEM_MASTER( ID ) VALUES( VALUE FOR seq_item_id ); |
なお、このシーケンスはトランザクションをサポートしていないため、以下のスクリプトを実行した場合でもシーケンス値は加算されることに注意が必要です。
BEGIN TRANSACTION SELECT NEXT VALUE FOR seq_item_id; ROLLBACK TRANSACTION |
検索結果のページング
主にGUIプログラムにおいて、大量のデータを表示させる場合ページング処理を行う場合があります。例えばgoogle検索では、のデフォルトで1ページあたり10件の検索結果を表示させ、以降のデータを見たい場合は”次ページ”をクリックさせることで、結果表示のレスポンスを向上せています。
SQLServer2012では、このページング処理を簡単に行う為にOFFEST-FETCH構文が追加されました。
SELECT * FROM ItemMaster ORDER BY ID OFFSET 100 ROWS FETCH NEXT 10 ROWS ONLY; |
上記の例では、検索結果の101~110件目までの10件を取得可能です。
これはMySQLでlimit句として実装されているものと同様の機能です。
EXECでプロシジャ実行時の結果セット
SQLServer2012では、EXECステートメントでプロシジャを実行した際、プロシジャから結果セットを取得することが可能です。
例えば、以下のスクリプトをSQLServer Management Studioで実行すると、EXECの結果として結果セットが表示されます。
-- ストアドプロシジャを作成する CREATE PROC getItemList AS -- 商品マスタを返す SELECT id, name FROM ItemMaster; GO EXEC getItemList WITH RESULT SETS ( ( id INT, name VARCHAR(64) ) ); |
例外処理での再スロー処理
SQLServerのストアドプロシジャであるTransact-SQLでは、SQLServer2005以降において例外処理がサポートされています。ただ、この例外処理はJavaやC#の様に、発生した例外ををCATCH句で再送出することが困難でした。
※厳密にはRAISEERRORで例外を再作成すれば擬似的に例外の再送出は可能でしたが、その記述は煩雑なものでした
これがSQLServer2012では、簡単に例外の再スローがTHROWの1行で可能となります。
BEGIN TRY BEGIN TRANSACTION SELCECT 1 / 0; -- わざと例外を発生させる COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION THROW -- THROWで、発生した例外を再送出可能 END CATCH |
THROWの1行で、CATCH句で捕獲した例外を再送出できます。
こちらの記事もどうぞ:
SQL Server2012で追加される新しい組み込み関数14個
関連記事
コメントを残す