SQL 2005中,通常会用到在SQL参数中传递表结构,最简单的办法是利用XML转换为table
代码
DECLARE
@h
INT
,
@XML VARCHAR ( 8000 ),
@2k5 XML
SELECT @XML = '
<jrt>
<item>
<id>11</id>
<name>CS Tester</name>
<company>EEE</company>
<phone>555-555-1234</phone>
</item>
<item>
<id>22</id>
<name>CS Tester</name>
<company>EEE</company>
<phone>555-555-1234</phone>
</item>
</jrt>
' ,
@2k5 = @XML
SELECT T.c.query( ' id ' ).value( ' .[1] ' , ' varchar(100) ' ) as id,
T.c.query( ' name ' ).value( ' .[1] ' , ' varchar(50) ' ) as name,
T.c.query( ' company ' ).value( ' .[1] ' , ' varchar(50) ' ) as company,
T.c.query( ' phone ' ).value( ' .[1] ' , ' nvarchar(50) ' ) as phone
FROM @2k5 .nodes( ' /jrt/item ' ) AS T(c)
@XML VARCHAR ( 8000 ),
@2k5 XML
SELECT @XML = '
<jrt>
<item>
<id>11</id>
<name>CS Tester</name>
<company>EEE</company>
<phone>555-555-1234</phone>
</item>
<item>
<id>22</id>
<name>CS Tester</name>
<company>EEE</company>
<phone>555-555-1234</phone>
</item>
</jrt>
' ,
@2k5 = @XML
SELECT T.c.query( ' id ' ).value( ' .[1] ' , ' varchar(100) ' ) as id,
T.c.query( ' name ' ).value( ' .[1] ' , ' varchar(50) ' ) as name,
T.c.query( ' company ' ).value( ' .[1] ' , ' varchar(50) ' ) as company,
T.c.query( ' phone ' ).value( ' .[1] ' , ' nvarchar(50) ' ) as phone
FROM @2k5 .nodes( ' /jrt/item ' ) AS T(c)
结果是:
id name company phone
---------- ---------- ---------- ----------
11 CS Tester EEE 555-555-12
22 CS Tester EEE 555-555-12