将int变量插入xml类型

时间:2012-06-22 18:11:17

标签: sql sql-server-2005 xquery

想要做的是这样的事情:

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。

提前致谢。

2 个答案:

答案 0 :(得分: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>'

答案 1 :(得分: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);