我有个XML文件:
<NewDataSet>
  <KSXXXZ>    
    <DsuserId>4101@1</DsuserId>
    <DsShsj>2011-01-18T20:25:49.6+08:00</DsShsj>
    <IsDo>false</IsDo>
  </KSXXXZ>
</NewDataSet>要将其导入到数据库中,存储过程如下
 
      DECLARE @idoc INT
      EXECUTE sp_xml_preparedocument 
        @idoc OUTPUT,
        @strXML
 --创建临时表
      CREATE TABLE #TEMP_KSXXXZ
      (       
[SzbuserId] [varchar](20) ,
[SzbShsj] [datetime] ,
[IsDo] [bit] 
      )
--插入数据到临时表
      INSERT INTO #TEMP_KSXXXZ
                (
           ,[SzbuserId]
           ,[SzbShsj]
           ,[IsDo])
         SELECT        
           ,[SzbuserId]
           ,[SzbShsj]
           ,[IsDo]
            FROM  OPENXML(@idoc,'/NewDataSet/KSXXXZ',2) WITH #TEMP_KSXXXZ运行时报“从字符串向 datetime 转换时失败。”

解决方案 »

  1.   

    好像是SQL2005对时区处理有要求,查了微软的文档,也没找到什么头绪。哪位遇到过类似的问题的?
      

  2.   

      CREATE TABLE #TEMP_KSXXXZ
      (   
    [SzbuserId] [varchar](20) ,
    [SzbShsj] [datetime] ,
    [IsDo] [bit]  
      )DECLARE @strXML VARCHAR(8000)
    SET @strXML='<NewDataSet>
      <KSXXXZ>   
      <DsuserId>4101@1</DsuserId>
      <DsShsj>2011-01-18T20:25:49.6+08:00</DsShsj>
      <IsDo>false</IsDo>
      </KSXXXZ>
    </NewDataSet>'
      
      DECLARE @idoc INT 
      EXECUTE sp_xml_preparedocument  
      @idoc OUTPUT,
      @strXML  SELECT   
      DsuserId AS SzbuserId
      ,DsShsj AS SzbShsj
      ,[IsDo] AS IsDo
      FROM OPENXML(@idoc,'/NewDataSet/KSXXXZ',2)  
      WITH ( DsuserId  varchar(10),
                DsShsj DATETIME,
                [IsDo] BIT)
      EXEC sp_xml_removedocument @idoc
     
    SzbuserId  SzbShsj                 IsDo
    ---------- ----------------------- -----
    4101@1     2011-01-18 12:25:49.600 0(1 行受影响)