BY】ひろTechメモ技術ブログです。2024年4月15日LocalでH2DBに対しては動いていたSQL文が、SQLServerで動かすとエラーを吐くようになって、事象の理解にやや時間を要した時の話です。結論、製品版DB(SQLServer)と、インメモリDB(H2DB)の単一値の原則違反エラーに対する挙動の違いが原因でした。テーブル内のデータによらず、SQL文のみを見て単一値の原則エラーを吐くかどうか決まるダメならダメでさっさとエラー吐いてもらった方がありがたいので、SQLServerの挙動の方が好みです。伝えたいことdev環境とLocalで異なるDB製品使ってる場合は、Localでテスト通っててもdev環境で動かなくなる可能性あり。いった場合でも、「Localでテスト通ってるからOK!」じゃなく、ちゃんとSQLの知識つけて、SQL文そのものを読んでコードレビューしましょう!!以上反省。H2DBとは??www.h2database.comJavaで作られたインメモリDB。使い捨てがしやすいので、単体テストとか検証によく使っています。clause.となりました。SQLServerだと動かないSQLがH2DBだとそのまま成功しちゃって不思議だな〜、というのが事象です。そもそもこのエラー何?「単一値の原則」エラーです。オライリーの「SQLアンチパターン」によると、SELECT句の選択リストに列挙される全ての列は、行グループごとに単一の値の行でなければなりません。{候補は1と3があるけど,何出せばいいんだ??}となって上記で述べたSQLServerのようなエラーを吐きます。テーブル内のデータによらず、SQL文のみを見て単一値の原則エラーを吐くかどうか決まるダメならダメでさっさとエラー吐いてもらった方がありがたいので、SQLServerの挙動の方が好みです。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。こちらの記事の続きです。PostgreSQL使おうとしたら結局Firestoreの良さに気づいた話【認証情報が変わってめんどくさい】こんにちは。Kotlinでバックエンドエンジニアをやりつつ、会社の技術ブログ運営に携わっております。Silverを受けて得た知見のうち、オンライン論理バックアップの用途と使うについてまとめます。現場でPostgeSQLを利用する機運が高まってきたため。経験5年目のWebエンジニアです。SIerからの転職経験1回あり。技術とリーダー経験の両取り目指して邁進中。ひろTechメモ技術ブログです。