1

XQuery 式を含むテーブルがあります。特定の XML データ構造の各行の式を評価したいと考えています。私はこれを試しています。

DECLARE @somexml xml
SET @somexml = '<root><nodeA>true</nodeA><nodeB>false</nodeB></root>'

SELECT
    @somexml.query('sql:column("af.Expression")' ) AS Fee,
    [af].Expression 
FROM 
    [AerialFees] af

Expression列には次のようなタイプの値が含まれます: NVARCHAR(MAX)-xs:boolean(/root[1]/nodeA[1])

これを実行するSELECTと、式は評価されず、代わりに式自体が返されます(ところで、XML型の)

Fee                        Expression
==================================================
xs:boolean(/root[1]/nodeA[1])    xs:boolean(/root[1]/nodeA[1])

@somexml.query('sql:column("af.Expression")' )実際の式に置き換えると、@somexml.query('xs:boolean(/root[1]/nodeA[1])' )式は正しく評価されます。

しかし、どうすれば上記を機能させることができますか?

4

1 に答える 1

2

次のようにクエリを動的に作成する必要があります。

DECLARE @somexml XML
SET @somexml = '<root><nodeA>true</nodeA><nodeB>false</nodeB></root>'

DECLARE @Fees Table
(
    RowNum int,
    Expression nvarchar(max)
)   

INSERT INTO @Fees
SELECT 
    RowNum = ROW_NUMBER() OVER(ORDER BY af.idAerialFee),
    [af].Expression 
FROM 
    [AerialFee] af 

DECLARE @MaxRownum INT
SET @MaxRownum = (SELECT MAX(RowNum) FROM @Fees)

DECLARE @Iter INT
SET @Iter = (SELECT MIN(RowNum) FROM @Fees)

DECLARE @SQL NVARCHAR(MAX)

WHILE @Iter <= @MaxRownum
BEGIN
    -- Get XQuery
    SELECT @SQL = 'SELECT @somexml.query(''' + af.Expression + ''') AS Fee'
    FROM @Fees af
    WHERE RowNum = @Iter

    -- Evaluate XQuery
    EXEC sp_executesql @SQL, N'@somexml xml', @somexml

    -- Get next rows number
    SET @Iter = @Iter + 1
END

SQL Server のクエリに XPath 式を提供する方法は他にありません。

式を直接追加してみることができます:

select @somexml.query(af.Expression)
from AerialFees as af

しかし、それはあなたにエラーメッセージを与えます

Msg 8172, Level 16, State 1, Line 27
The argument 1 of the XML data type method "query" must be a string literal.

または、sql:column(行ったように)使用しようとすることもできますが、それは列の値を返すだけです。式を評価しようとしません。

xsl:evaluateDimitre Novatchevが示唆するように、 SQL Server ではサポートされていません。

于 2013-01-09T13:33:05.203 に答える