投稿者 SSD  (社会人) 投稿日時 2022/6/10 13:14:51
魔界の仮面弁士 様

すみません、言い方を間違えました。
仰る通りにWHERE句は固定にしています。

DECLEAR @(変数名) = (値)
SELECT ...
FROM ...
WHERE ...

の(値)の部分だけ動的に変化させてます
なので、この変数宣言句を含む行だけコメントアウトしてsqlファイルに保存し、
アプリケーションでこのファイルから文字列を取得&
"DECLEAR @(変数名) = (値)"を文字列として先頭に追加((値)はフォームから取得した値を入れる)、
という感じのことをしています。

パラメータークエリというのを初めて知ったので調べてみました。
https://hosopro.blogspot.com/2016/09/parameters-query.html
こちらのサイトから該当する部分だけ抜粋させて頂きました。
以下の部分で間違いないでしょうか?

----------
'データソースで実行するTransact-SQLステートメントを指定
cmd.CommandText = "SELECT [ID], [Name], [Type] FROM [T_Animals] WHERE [Type] = @Type"
cmd.Parameters.Clear()
'パラメータ値を設定
cmd.Parameters.Add("@Type", System.Data.SqlDbType.NVarChar, 50).Value = "猫"
----------

これですと私がしているような変数宣言句を追加しなくてもできますね。
こちらの方がスマートな感じがします。

この紹介されているコードでは
"SELECT [ID], [Name], [Type] FROM [T_Animals] WHERE [Type] = @Type"
というクエリ本体(?)部分はコード内に直に書いてあります。
結合がある場合や、条件が分岐する場合などはもっと長いクエリになるので、
直にコードに書くというのはインテリセンスもなく、検証もしにくいと思います。

元々はGUI(SQL Server Management StudioやAzure Data Studioなど)で編集しておいて、
それをコード内にコピペするんでしょうか?
それとも別の方法で運用するのが一般的でしょうか?
ということを聞きたかったのが本題です。

Dapperについても調べてみましたが、こちらは主に取得したレコードの列とクラスのパラメーターを
マッピングするのが便利な機能という感じでしょうか?