SQL

SqlServerCompact4.0 INSERTで複数レコードの挿入は可能か

SqlServer2008以降かと思いますが、INSERT文にて複数のレコードを挿入できるようになりました。SqlServerCompact4.0でも同じような処理をしたいのですが、クエリ解析でエラーが発生してしまいます。

ソフトウェア開発日記さんでも紹介されていますが、SqlServer2008以降では

INSERT INTO [tbl従業員] ([clm_ID],[clm_氏名],[clm_生年月日]) VALUES (1,'name1','1980/10/1') , (2,'name2','1976/3/5')

のようにVALUES以降をカンマで区切ることにより、複数のレコードを挿入することができました。

SqlServerCompact4.0はSqlServer2012の流れを汲んでいるので(もちろん、上記コードはSqlServer2012でも可能です)可能かと思っていたのですが、いざ実行してみるとVALUES後のカンマが不正トークンだと言われてしまいます。

まさかと思ってMSDNを検索してみると、SqlServer2012のINSERTは

[ WITH <common_table_expression> [ ,...n ] ]
INSERT 
{
        [ TOP ( expression ) [ PERCENT ] ] 
        [ INTO ] 
        { <object> | rowset_function_limited 
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
        }
    {
        [ ( column_list ) ] 
        [ <OUTPUT Clause> ]
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ] 
        | derived_table 
        | execute_statement
        | <dml_table_source>
        | DEFAULT VALUES 
        }
    }
}
[;]

12行目にある「VALUES ( { DEFAULT | NULL | expression } [ ,…n ] ) [ ,…n ] 」の表現から複数のレコードが挿入できることがわかります。

一方でSqlServerCompact4.0のINSERTは

INSERT [INTO] 
      table_name  [ ( column_list ) ] 
      { VALUES 
      ( { DEFAULT | NULL | expression } [ ,...n] ) 
| derived_table
       }

以上のようになっており、複数レコードを指定できる書式になっていませんでした。

SqlServerCompact4.0で複数のレコードをINSERTする際には、レコード数と同じ回数のINSERTを発行する必要があるようです。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!