Dynamics CRMグローバルオプションセット一覧がほしい時に実行するSQL

Dynamics CRMのカスタムグローバルオプションセットの一覧がほしい時に実行するSQLです。

SELECT
	PicklistValue.Label,
	PicklistValue.Name,
	--PicklistValue.OptionSetId,
	LLLV2.Label,
	PicklistValue.Value
FROM LocalizedLabelLogicalView AS LLLV2
INNER JOIN
(
	-- カスタムグローバルオプションセットのPickListIDを表示
	SELECT
		OSIdLabel.OptionSetId,
		OSIdLabel.Label,
		OSIdLabel.Name,
		APVLV.Value,
		APVLV.AttributePicklistValueId
	FROM   AttributePicklistValueLogicalView AS APVLV
	INNER JOIN 
	(
		-- カスタムグローバルオプションセットの表示名と名前を表示
		SELECT
			OSLV.OptionSetId,
			LLLV.Label,
			OSLV.Name
		FROM OptionSetLogicalView AS OSLV
		INNER JOIN LocalizedLabelLogicalView AS LLLV ON OSLV.OptionSetId = LLLV.ObjectId
		WHERE LLLV.ObjectColumnName = 'DisplayName'
		AND OSLV.IsGlobal = 1
		AND OSLV.IsCustomOptionSet = 1
	) AS OSIdLabel
	ON OSIdLabel.OptionSetId = APVLV.OptionSetId
) AS PicklistValue
ON LLLV2.ObjectId = PicklistValue.AttributePicklistValueId
WHERE LLLV2.ObjectColumnName = 'DisplayName' 


LocalizedLabelLogicalViewやMetadataSchema.LocalizedLabelには、
オプションセットのプルダウン内の各ラベルや値はもちろんですが、オプションセット自体の表示名と名前もデータが入っているんですね。
LabelTypeCode列の値が1の場合、プルダウン内の各ラベルの表示で、
LabelTypeCode列の値が10の場合、オプションセット自体の表示名を表します。


参考サイト

How to query CRM Global OptionSet Values in SQL? | Arun Potti's MS CRM blog