2012-06-22 43 views
0

什麼想要做的就是這樣的事情:插入int變量轉換成XML類型

declare @id int 
set @id = (select ID from tbUsers where Name = 'John_Stack') 

declare @xml xml 
set @xml = '<users> <user id = "' + @id + '"/></users>' 

中止說

操作數類型衝突服務器:INT與XML不兼容。

這樣做的最佳方法是什麼?

我正在使用SQL Server 2005.

在此先感謝。

+0

另外:你爲什麼不只是做:'選擇@id從tbUsers = ID其中Name =「John_Stack'' - 在有確實沒有點''SET和做一個「子查詢」來填充數值...... –

回答

3
declare @id int 
set @id = (select ID from tbUsers where Name = 'John_Stack') 

declare @xml xml 
set @xml = '<users> <user id = "' + CONVERT(varchar,@id) + '"/></users>' 
+0

'declare @xml xml set @xml =''' – Grixxly

1

您可能希望避免使用字符串連接從頭開始構建自己的XML。至少對我來說,感覺不太清楚,特別是當你有更好的工具時。例如,在SQL Server 2005中,你可以這樣做,讓你期望的結果:

Declare @xml xml; 
Set @xml = (
    Select id As [@id] 
    From tbUsers 
    Where Name = 'John_Stack' 
    For XML Path('user'), Root('users'), Type); 

或者,如果你認爲tbUsers不會有你的用戶,但你還是要根<users />元素,即使沒有行是退換,你可以使用這種變化:

Declare @xml xml; 
Set @xml = (
    Select (
     Select id As [@id] 
     From tbUsers 
     Where Name = 'John_Stack' 
     For XML Path('user'), Type) 
    For XML Path('users'), Type);