質問:複数の役割を持っているT_Userシステムのユーザ、T_UserRoleテーブルの仲間、T_Roleとしてテーブルの役割。
今すぐ削除のUserListを必要とし、各文字、文字列型スプライシングのユーザー情報を削除します。
予選:
T_UserRoleテーブル構造:
STUFFの文字列関数は、別の文字列に文字列です。文字列で指定された長さの開始位置を削除する文字の最初の列は、2番目の文字列は、開始位置に挿入され、構文は以下の通りです。
STUFF(<character_expressionに>、<起動>、<長さ>、<character_expressionに>)
<character_expressionに>パラメータが指定された文字列データは、バイナリデータまたは文字定数、変数、または列であってもよいです。<起動>パラメータは、欠失および挿入の開始位置を指定する整数値である、BIGINT型であってもよいです。<スタート>または<長さ>パラメータが負の場合は、NULL文字列が返されます。<character_expressionに>長い最初のものよりも、パラメータを<スタート>場合は、NULL文字列を返します。<長さ>パラメータには、削除する文字の数を指定する整数であるBIGINTタイプであってもよいです。もし最初より最後の文字<長さ> <character_expressionに>長いし、<character_expressionに>中の最後の発生を削除します。
XMLパスのクエリ結果が行に従うXMLフォーマットにエクスポートすることができます。
:あなたはを参照することができますhttps://www.cnblogs.com/yasuo2/p/6433697.html
特定の分析:
1.(キー)中央のオレンジ色の部分のコードは、XML形式のマルチラインのコンテンツに変換されます。個別の重複排除。結果:
2.コードの黒い部分は、目の前に取り出される「」文字は、文字列関数のものです。
// の簡素化 // tempXml =、64、65これは、データを望むものです
、結果出力64を、第一の位置から、//指定された文字列@tempXml 1の長さを除去する、の前に挿入されている「(なし文字) 65。 SELECT スタッフ(tempXml {}、1、1、'' ))
3. 青い部分ではなく、空の判断。
最終的なコード
//最終的なコード
SELECT tu.Id、 tu.Name としてユーザ名、
ISNULL((選択 のものを((選択 別個 ' ' + CONVERT(VARCHAR 、mur.RoleId)
T_UserRole MUR RIGHT JOIN T_UserのTUSをON mur.UserId = tus.Id AND mur.IsDel = 0 AND mur.IsUsed = 1つの LEFT JOIN T_RoleロールON role.Id = mur.RoleIdを ここ tus.IsDel = 0 と tus.Id = tu.Id と role.IsDel = 0 と role.IsUsed = 1 FOR XMLのPATH(''))、1、1、'' ))、0 )としてRoleIds、
(選択 のものを((選択 別個 ' ' + CONVERT(VARCHAR 、role.Nameを) からT_UserRole MUR RIGHT JOIN T_UserのTUSをON mur.UserId = TUS。 ID と mur.IsDel = 0 AND mur.IsUsed = 1 LEFTは、JOIN T_Roleの役割を ON role.Id = mur.RoleId AND role.IsDel = 0 AND role.IsUsed = 1 tus.IsDel = 0 と tus.Id = tu.Id と role.IsDel = 0 と role.IsUsed = 1 FOR XMLパス('' ))、1、1、'' ))のようなロール名 からT_User TU tu.IsDelは= 0 ORDER BY tu.CreateTime DESC
結果: