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を発行する必要があるようです。