使用OpenXML在表中保存数据

时间:2011-12-15 12:59:09

标签: sql xml stored-procedures

我想将xml数据保存到sp中的表中,作为字符串传递,这是我的代码

alter PROCEDURE usp_be_insertXML 
-- Add the parameters for the stored procedure here
@xml varchar(1000) 

AS
BEGIN
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET NOCOUNT ON;

EXEC sp_xml_preparedocument @idoc OUTPUT, @xml

BEGIN TRY       
INSERT INTO testing ([Name] ,[Fname] )
SELECT  Column1,Column2
FROM OPENXML (@idoc, 'NewDataSet/Sheet1', 1)
WITH ([Column1] [nvarchar](50),
[Column2] [nvarchar](50))

END TRY
BEGIN CATCH

END CATCH
EXECUTE sp_xml_removedocument @idoc
END

这只在表中插入NULL,有什么帮助吗? 这是XML

 <NewDataSet>
    <Sheet1>
      <Column1>Name</Column1>
      <Column2>Fname</Column2>
    </Sheet1>
    <Sheet1>
      <Column1>khan</Column1>
      <Column2>dd</Column2>
    </Sheet1>
    <Sheet1>
      <Column1>mytest</Column1>
      <Column2>ff</Column2>
    </Sheet1>
 </NewDataSet> 

1 个答案:

答案 0 :(得分:0)

问题是您指定使用“以属性为中心”的映射(OPENXML的最后一个参数中的“1”),但您的数据元素实际上是元素。您可以通过以下两种方式获得所需结果:

1)将参数更改为“2” 2)更改您的WITH子句以显式声明您正在寻找的子元素:

WITH (
[Column1] [nvarchar](50) 'Column1'
, [Column2] [nvarchar](50) 'Column2' 
)