web-dev-qa-db-ja.com

実行計画警告のカーディナリティxmlデータ型

私は次のように述べています。

-- 1st
DECLARE @AuditParameters XML = (
    SELECT
        1 AS AccountID,
        2 AS CategoryID,
        3 AS CategoryAttributeID,
        '4' AS SyncBatchGUID
    FOR XML PATH(N'Parameters'), ELEMENTS XSINIL
)

-

-- 2nd
DECLARE @AuditParameters XML = convert(xml, (
    SELECT
        1 AS AccountID,
        2 AS CategoryID,
        3 AS CategoryAttributeID,
        '4' AS SyncBatchGUID
    FOR XML PATH(N'Parameters'), ELEMENTS XSINIL
))

どちらのステートメントも同じ実行プランになりますが、警告メッセージが表示されます

式の型変換(CONVERT_IMPLICIT(xml、[Expr1004]、0))は、クエリプランの選択で "CardinalityEstimate"に影響を与える可能性があります。

2つ目のステートメントをXMLに変換しようとしましたが、同じ警告メッセージが表示されます。

上記のステートメントのこの警告メッセージを取り除くにはどうすればよいですか?

ありがとうございました

4
Kevy Augusto

FOR XMLクエリで TYPEディレクティブを使用する

SQL Serverによる xml(Transact-SQL) のサポートにより、オプションで、FOR XMLクエリの結果がxmlデータ型として返されるように指定できます。 TYPEディレクティブ。

-- 1st
DECLARE @AuditParameters XML = (
    SELECT
        1 AS AccountID,
        2 AS CategoryID,
        3 AS CategoryAttributeID,
        '4' AS SyncBatchGUID
    FOR XML PATH(N'Parameters'), ELEMENTS XSINIL,Type
)
4
KumarHarsh

TYPEを追加すると、文字列ではなく内部クエリからXMLが返されます

DECLARE @AuditParameters XML = (
    SELECT
        1 AS AccountID,
        2 AS CategoryID,
        3 AS CategoryAttributeID,
        '4' AS SyncBatchGUID
    FOR XML PATH(N'Parameters'), ELEMENTS XSINIL, TYPE
)
4
Martin Smith