[解決済み] SQL Server の XML カラムの値を問い合わせるには?
2022-05-27 20:40:15
質問
次のようなXMLがXMLカラム(
Roles
という名前の)SQL Server データベースに保存されています。
<root>
<role>Alpha</role>
<role>Beta</role>
<role>Gamma</role>
</root>
特定のロールを持つ行をすべてリストアップしたい。このロールはパラメータで渡されます。
どのように解決するのですか?
select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
カラムが
XML
でない場合は、変換する必要があります。また、XMLデータの特定の属性を問い合わせるために、他の構文を使用することもできます。以下はその例です。
データカラムがこのようなものであったとします。
<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>
... そして、あなたが欲しいのは
CodeSystem = 2
であれば、あなたのクエリはこうなります。
select
[data]
from
[dbo].[CodeSystemCodes_data]
where
CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'
これらのページでは、T-SQLでXMLをクエリする方法について詳しく説明します。
EDIT
もうちょっと遊んでみたら、こんな素晴らしいクエリができました。 CROSS APPLY . このクエリは、すべての行(ロール)に対して、式で指定した値を検索します。
このテーブル構造を考えると
create table MyTable (Roles XML)
insert into MyTable values
('<root>
<role>Alpha</role>
<role>Gamma</role>
<role>Beta</role>
</root>')
このように問い合わせることができます。
select * from
(select
pref.value('(text())[1]', 'varchar(32)') as RoleName
from
MyTable CROSS APPLY
Roles.nodes('/root/role') AS Roles(pref)
) as Result
where RoleName like '%ga%'
SQL Fiddleはこちらで確認できます。 http://sqlfiddle.com/#!18/dc4d2/1/0
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] カラム名の変更 SQL Server 2008
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] データベースのインデックス作成はどのように行われるのですか?[クローズド]
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] SQL Server における DateTime2 と DateTime の比較
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?