1

やりたいことは次のようなものです:

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 を使用しています。

前もって感謝します。

4

2 に答える 2

4
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>'
于 2012-06-22T18:16:31.327 に答える
2

文字列連結を使用して独自の 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);
于 2012-06-22T23:50:58.740 に答える