как передать массив дат в формате xml для процедуры хранения

#asp.net #sql-server

#asp.net #sql-сервер

Вопрос:

Bcz когда вы преобразуете эту строку в date, это не будет проанализировано должным образом. для этого вам нужно отправить строку даты в соответствии с форматом даты sql Server

 ALTER PROCEDURE [dbo].[SprSelectScheduleForReAutoAllocate]  --'<AADates><AADate AADateValue="2011-04-27 00:00:00.000" /><AADate AADateValue="2011-04-28 00:00:00.000" /></AADates>'
(
   @Datexml xml     
)
AS
BEGIN
                  EXEC sp_xml_preparedocument @xmlDoc output ,@DateXml 

                                SELECT  AADateValue
        FROM OPENXML(@xmlDoc,'AADates/AADate',1) 
        WITH 
        (
        AADateValue Datetime    
        )
        xmlDocuments

                EXEC sp_xml_removedocument @xmlDoc  
End
  

Ответ №1:

SQL Server считывает значения даты и времени в соответствии со стандартом ISO 8601 в следующих двух форматах:

 YYYY-MM-DDThh:mm:ss[.mmm]
YYYYMMDDThh:mm:ss[.mmm]
  

Форматируйте введенные данные таким образом, и SQL Server никогда не выдаст ошибку из-за несовместимости культуры или языка. Это независимый от культуры / языка способ передачи значения, если вы не можете передать его как действительное datetime значение.

Комментарии:

1. Нет, в том-то и дело, что формат даты не меняется. Это литеральное значение, не зависящее от формата. Он ВСЕГДА будет успешно преобразован в допустимое значение datetime.

2. УСТАНОВИТЕ DATEFORMAT ydm; используя этот код, вы можете изменить формат даты

3. Вам нужно убедиться, что отформатированные даты в @Datexml не используют стандартный или встроенный формат, типичный для XML, поскольку SQL Server плохо понимает его, убедитесь, что вы придерживаетесь формата ISO 8601, если вам нужно передавать даты в виде строк в SQL Server или из него.