2014-08-25 6 views
0

У меня есть данные XML-файла, приведенные ниже.Ошибка конверсии при преобразовании даты и/или времени из символьной строки (при попытке сохранить данные XML)

'<NewDataSet> 
    <tblVCWS_Schedule> 
    <PKWSSchedule>1</PKWSSchedule>  
    <ScheduleTime>PT7H</ScheduleTime>  
    </tblVCWS_Schedule> 
    <tblVCWS_Schedule> 
    <PKWSSchedule>2</PKWSSchedule> 
    <ScheduleTime>PT13H30M</ScheduleTime>  
    </tblVCWS_Schedule> 
    <tblVCWS_Schedule> 
    <PKWSSchedule>3</PKWSSchedule>  
    <ScheduleTime>PT13H30M</ScheduleTime>  
    </tblVCWS_Schedule> 
</NewDataSet>' 

Поле ScheduleTime - это поле типа времени (7) в SQL.

Но когда я пытаюсь сохранить данные во временную таблицу я набираюсь

«Конверсия удалось при преобразовании даты и/или времени из символьной строки»

DECLARE @PreAdviceSubmissions varchar(max) 

    set @PreAdviceSubmissions= 
    '<NewDataSet> 
     <tblVCWS_Schedule> 
     <PKWSSchedule>1</PKWSSchedule>  
     <ScheduleTime>PT7H</ScheduleTime>  
     </tblVCWS_Schedule> 
     <tblVCWS_Schedule> 
     <PKWSSchedule>2</PKWSSchedule> 
     <ScheduleTime>PT13H30M</ScheduleTime>  
     </tblVCWS_Schedule> 
     <tblVCWS_Schedule> 
     <PKWSSchedule>3</PKWSSchedule>  
     <ScheduleTime>PT13H30M</ScheduleTime>  
     </tblVCWS_Schedule> 
    </NewDataSet>' 

    DECLARE @hDoc int 

     CREATE TABLE #PreAdviceSubmissions 
     ( 
      PKWSSchedule bigint, 
      ScheduleTime Time(7) 
     ) 

     EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @PreAdviceSubmissions 

     INSERT INTO #PreAdviceSubmissions 
     (
      PKWSSchedule, 
      ScheduleTime 
     ) 
     SELECT 
      PKWSSchedule , 
      CAST(ScheduleTime AS TIME(7)) 
     FROM OPENXML(@hDoc,'/NewDataSet/tblVCWS_Schedule', 2) 
     WITH 
     (
      PKWSSchedule bigint 'PKWSSchedule' , 
      ScheduleTime Time(7) 'ScheduleTime'   
     ) 

     EXECUTE sp_xml_removedocument @hDoc 

     select * from #PreAdviceSubmissions 

Может кто-нибудь поможет решить Эта проблема? Обратите внимание, что я не могу изменить тип данных Time (7) на любой другой тип данных.

+0

установить ScheduleTime как PT13H30M И его не хорошо formed.this значения не преобразуются в Time –

+0

Как я могу конвертировать PT13H30M это время? Я получаю значение как в XML-файле? –

+0

ТИП ВРЕМЕННЫХ ДАННЫХ НЕ ПРИНИМАЕТ STRING КАК ВРЕМЯ В СЕРВЕРЕ SQL. ВЫ ИСПОЛЬЗУЕТЕ ЗАМЕНЯТЬСЯ В КОДЕЛЕ СЕБЯ И КОНВЕРТИРУЙТЕ ВРЕМЯ. –

ответ

0

Попробуйте

INSERT INTO #PreAdviceSubmissions 
    (
     PKWSSchedule, 
     ScheduleTime 
    ) 
    SELECT 
     PKWSSchedule , 
     CASE WHEN (SELECT CHARINDEX('%M%',ScheduleTime)) > 0 THEN 
     CONVERT(time(7),REPLACE(REPLACE(REPLACE(ScheduleTime,'PT',''),'H',':'),'M','')) 
     ELSE 
     CONVERT(time(7),REPLACE(REPLACE(ScheduleTime,'PT',''),'H',':00')) END 
    FROM OPENXML(@hDoc,'/NewDataSet/tblVCWS_Schedule', 2) 
    WITH 
    (
     PKWSSchedule bigint 'PKWSSchedule' , 
     ScheduleTime Time(7) 'ScheduleTime'   
    ) 
-1

 
DECLARE @TIME VARCHAR(50) = 'PT13H30M'

IF (SELECT PATINDEX('%M%','@TIME') > 0) BEGIN SELECT CONVERT(TIME,REPLACE(REPLACE(REPLACE(@TIME,'PT',''),'H',':'),'M','')) END ELSE BEGIN SELECT CONVERT(TIME,REPLACE(REPLACE(@TIME,'PT',''),'H',':00')) END

Смежные вопросы

 Смежные вопросы