2011-06-02 7 views
0

私は次のクエリがあります:私は動的に構成テーブルから、実行時にピックアップする名前空間定義を希望しかしSQL Serverの動的な宣言

;WITH XMLNAMESPACES (
    'Bob' AS b 
) 
SELECT 'Test' AS [@b:Test] 
FOR XML PATH('root') 

を。私は、次のことを試してみたが、彼らは、有効なSQLではありません。

-- use a sub query 
;WITH XMLNAMESPACES (
    (SELECT 'Fred') AS b 
) 
SELECT 'Test' AS [@b:Test] 
FOR XML PATH('root') 

-- declare a variable 
DECLARE @ns VARCHAR(10) = 'Fred' 

;WITH XMLNAMESPACES (
    @ns AS b 
) 
SELECT 'Test' AS [@b:Test] 
FOR XML PATH('root') 

は、動的な名前空間定義を持ってする方法はありますか?

おかげで、
トム

答えて

1

あなたは、動的SQLを使用する必要があります

DECLARE @d NVARCHAR(30)='Fred' 

;WITH XMLNAMESPACES (
    'UniqueValue' AS b 
) 
SELECT @ns=(
SELECT 'Test' AS [@b:Test] 
FOR XML PATH('root')) 

SELECT CAST(REPLACE(@ns, 'UniqueValue',@D) AS XML) 
+0

動的SQLとは対照的に、基本的な文字列操作のように見えます。 –

0

は、私が実際に出力を制御するためにFOR XML EXPLICITモードを使用するように切り替えた - http://msdn.microsoft.com/en-us/library/ms189068(v=SQL.100).aspx - 私は、ネストされた使用していたとして、 XMLフラグメントと空のxmlns属性の取得これにより、プレースホルダと文字列操作を使わずに名前空間を動的に設定することもできました。