2011-06-02 131 views
0

我有以下查询:SQL服务器

;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 ..谢谢你的答案。 –