转一个例子:DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
      </Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue 
             white red">
            <Urgency>Important</Urgency>
            Happy Customer.
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
      WITH (oid     char(5), 
            amount  float, 
            comment ntext 'text()')
EXEC sp_xml_removedocument @idoc

解决方案 »

  1.   

    @doc  可以变成C:\BOOT.XML吗?
      

  2.   

    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    SET @doc ='<ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
       <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
          <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
          <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
       </Order>
    </Customer>
    </ROOT>'EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    select * from AROOT where id in(SELECT    *
    FROM       OPENXML (@idoc, '/ROOT/Customer',1)
                WITH (CustomerID  varchar(10)))
      

  3.   

    你的例子:
    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    --sample XML document
    SET @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
       <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
          <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
          <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
       </Order>
    </Customer>
    </ROOT>
    '
    -- Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc-- Execute a SELECT statement using OPENXML rowset provider.
    SELECT * FROM AROOT where ID in (SELECT CustomerID
    FROM OPENXML (@idoc, '/ROOT/Customer/Order', 1)
          WITH (CustomerID    varchar(1000)
              ))
    EXEC sp_xml_removedocument @idoc
      

  4.   

    把上面的建立一个存储过程,用程序读出来xml文件内容,传到存储过程里
      

  5.   

    因为我的XML会随时变化的,所以不能定时现在就是如何读取XML文件的内容
      

  6.   

    DECLARE @idoc int,@doc varchar(8000)--从文件中读出XML内容到临时表
    create table #tb (doc varchar(8000))
    bulk insert #tb from 'c:\ROOT.XML'    --XML文件:c:\ROOT.XML--将读取到的数据保存到变量中
    set @doc=''
    select @doc=@doc+doc from #tb--删除临时表
    drop table #tb
    go--处理XML文件
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc--执行查询
    SELECT * FROM AROOT WHRE ID=
    (SELECT * FROM OPENXML (@idoc, '/ROOT/Customer',1)
    WITH (CustomerID varchar(50))
    )--释放XML对象
    EXEC sp_xml_removedocument @idoc
      

  7.   

    --下面部分就是读取XML文件的内容
    --要求你的XML文件不能超过8000字节,否则只能改用存储过程处理--从文件中读出XML内容到临时表
    create table #tb (doc varchar(8000))
    bulk insert #tb from 'c:\ROOT.XML'    --XML文件:c:\ROOT.XML--将读取到的数据保存到变量中
    set @doc=''
    select @doc=@doc+doc from #tb--删除临时表
    drop table #tb
    go
      

  8.   

    zjcxc(邹建) 这个可行xml到临时表,如果使用频率高的时候会不会影响速度,还有没有别的方法?
      

  9.   

    如果是在SQL数据库中处理,暂时就只想到这个办法.如果是配合在前台处理.最好就直接在前台读取,然后传递最终的结果给SQL语句来处理比较好.
      

  10.   

    create table #tb (doc varchar(8000))
    bulk insert #tb from 'c:\ROOT.XML'    --XML文件:c:\ROOT.XML
    这样的方法可以实际应用么?
    怀疑
      

  11.   

    zjcxc(邹建),好象你并没有弄清楚楼主的帖子的意思吧,她是取XML中的某一数据,不是整个文件啊.
      

  12.   

    to: zxm954712(三绝剑)不全部读出来.怎么分析?
      

  13.   

    下面是MS SQLSERVER GROUP的一个FAQ:
    问:怎样才能将XML文件导入SQL Server 2000?
    答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种:
    1.大容量装载COM接口。如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language  3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口。大容量状态COM接口包含在SQLXML 3.0 SP1的免费下载中。
    2.textcopy.exe命令行实用工具。如果不希望将文档的实体和属性析取到关系表中,您可以使用textcopy.exe命令行实用工具。Textcopy.exe是将 文本和ima3.ge数据类型从单一服务器行或列移入或移出的优秀工具。
    数据转换服务(DTS)。如果XML文档很简单,您可以使用DTS将信息逐行析取到表中。这一方法要求您将XML文件定义为输入数据源,将数据库表定义为输 出数据源,并编写ActiveX脚本剖析"<"和">"方式的字符输入,以析取实体、属性及其值。