クエリが Firebird 構文に準拠していません。ドライバーは一度に 1 つのステートメントしか実行できません ( は 1EXECUTE BLOCK
つのステートメントと見なされることに注意してください)。を使用しないでください。これSET TERM
は ISQL ツール (および FlameRobin などの他のクエリ ツール) のアーティファクトであり、実際には Firebird SQL 言語の一部ではありません。
;
また、クエリに含めるべきではありません。EXECUTE BLOCK
これらは、1) PSQL (ストアド プロシージャ、トリガー、内部) および 2) ISQL などのツールでステートメントを分離 (終了) する場合にのみ有効です。
したがって、次のクエリを単独で使用するだけで十分です。
INSERT INTO COUNTRY1 SELECT '2', 'two ' FROM RDB$DATABASE UNION ALL SELECT '4', 'four' FROM RDB$DATABASE UNION ALL SELECT '5', 'five' FROM RDB$DATABASE
編集
私がコメントしたように、パーサーUNION
はINSERT ... SELECT
.
サブセレクトを使用すると、おそらくうまくいくでしょう:
INSERT INTO COUNTRY1
SELECT column1, column2 FROM (
SELECT '2' AS column1, 'two ' AS column2 FROM RDB$DATABASE
UNION ALL SELECT '4', 'four' FROM RDB$DATABASE
UNION ALL SELECT '5', 'five' FROM RDB$DATABASE
)
編集2
以下のコードでテストしたところ、動作します。期待される行が挿入されます。
static void Main(string[] args)
{
var constrBuilder = new FbConnectionStringBuilder();
constrBuilder.DataSource = "localhost";
constrBuilder.Database = @"D:\data\db\testdatabase.fdb";
constrBuilder.UserID = "sysdba";
constrBuilder.Password = "masterkey";
string constr = constrBuilder.ToString();
using (var con = new FbConnection(constr))
{
con.Open();
using (var trans = con.BeginTransaction())
{
var cmd = new FbCommand();
cmd.CommandText = "INSERT INTO COUNTRY1 SELECT '2', 'two ' FROM RDB$DATABASE UNION ALL SELECT '4', 'four' FROM RDB$DATABASE UNION ALL SELECT '5', 'five' FROM RDB$DATABASE";
cmd.Connection = con;
cmd.Transaction = trans;
cmd.ExecuteNonQuery();
trans.Commit();
}
}
}