[解決済み] 複数の Id 値を受け付ける T-SQL ストアド・プロシージャ
2022-05-10 07:52:26
質問
ストアドプロシージャにパラメータとして ID のリストを渡すための優雅な方法はありますか?
たとえば、私は部門1、2、5、7、20をストアドプロシージャで返したいです。過去に、私は以下のコードのようなidのカンマ区切りリストを渡しましたが、それを行うことは本当に汚いと感じています。
SQL Server 2005 は、私が考える唯一の適用可能な制限です。
create procedure getDepartments
@DepartmentIds varchar(max)
as
declare @Sql varchar(max)
select @Sql = 'select [Name] from Department where DepartmentId in (' + @DepartmentIds + ')'
exec(@Sql)
どのように解決するのですか?
Erland Sommarskogは、過去16年間、この質問に対する権威ある回答を維持してきました。 SQL Server における配列とリスト .
配列やリストをクエリに渡す方法は、少なくとも1ダースあります。それぞれが独自の長所と短所を持っています。
- テーブル値パラメータ . SQL Server 2008 以降でのみ使用され、おそらく普遍的な "best" アプローチに最も近いものです。
- 反復法 . 区切られた文字列を渡してループさせる。
- CLRを使用する . .NET 言語からの SQL Server 2005 以降のみ。
- XML . 多くの行を挿入するのに非常に適していますが、SELECT には過剰かもしれません。
- 数値の表 . 単純な反復法より高い性能/複雑さ。
- 固定長要素 . 固定長にすることで、区切り文字列よりも速度が向上する
- 数値の関数 . 数の表と固定長のバリエーションで、数は表から取得するのではなく、関数で生成されます。
- 再帰的共通テーブル式 (CTE)を使用します。SQL Server 2005 以降、まだあまり複雑ではなく、反復法より高いパフォーマンスを発揮します。
- 動的SQL . 遅くなることがあり、セキュリティ上の影響がある。
- としてリストを渡す 多くのパラメータ . 面倒でエラーが起こりやすいですが、シンプルです。
- 本当に遅いメソッド . charindex、patindex、LIKEを使用するメソッドです。
本当にお勧めできるのは 記事を読む を読んで、これらのオプションの間のトレードオフについて学んでください。
関連
-
[解決済み] TABLOCKとTABLOCKXの比較
-
[解決済み] 変数に値を代入するSELECT文は、データ検索操作と組み合わせてはいけません。
-
[解決済み] UPDATEエラーです。"REPLACEの引数1の引数データ型textは無効です"
-
[解決済み] SQL ServerのIsNull()関数に相当するOracleは何ですか?
-
[解決済み] SQL ServerでRegExを使用する
-
[解決済み] SQLのReplace関数内の正規表現?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] SQL Serverストアドプロシージャに配列を渡す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー "INSERT EXEC文はネストできません。" "INSERT-EXEC文の中でROLLBACK文は使用できません。" これを解決するにはどうすればよいですか?
-
[解決済み] SQL Serverで小数点の後に2桁の数字を表示させる方法
-
[解決済み] SQL Server Error "String Data, Right Truncation "の意味と修正方法について教えてください。
-
[解決済み] TEXTIMAGE_ON [PRIMARY]とは何ですか?
-
[解決済み] SQL Server xp_delete_file パラメータ
-
[解決済み] 管理者ユーザーで有効なxp_cmdshellへのアクセスが拒否されました。
-
[解決済み] SSRS レポートの定義が無効です。
-
[解決済み] ')' 付近の構文が正しくない場合の対処方法
-
[解決済み] SQL Server: caseステートメントでUniqueIdentifierを文字列に変換する
-
[解決済み] 一括読み込みができません。オペレーティングシステムのエラーコード5(アクセスが拒否されました。)