Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程在XML字符串中插入的日期值比实际日期小一个_Sql_Xml_Sql Server 2008 - Fatal编程技术网

Sql 存储过程在XML字符串中插入的日期值比实际日期小一个

Sql 存储过程在XML字符串中插入的日期值比实际日期小一个,sql,xml,sql-server-2008,Sql,Xml,Sql Server 2008,我正在使用XML插入/更新/删除表中的记录。但是当我插入行时,插入的日期值比实际值小一个。下面是我的存储过程的代码 IF(@Mode='UPDATE_TABLE') BEGIN ;WITH XmlData AS ( SELECT NDS.DT.value('(ClaimExpenseID)[1]', 'int') AS 'ClaimExpenseID', NDS.DT.value('

我正在使用XML插入/更新/删除表中的记录。但是当我插入行时,插入的日期值比实际值小一个。下面是我的存储过程的代码

IF(@Mode='UPDATE_TABLE')
BEGIN
    ;WITH XmlData AS 
        (
            SELECT
                NDS.DT.value('(ClaimExpenseID)[1]', 'int') AS 'ClaimExpenseID',
                NDS.DT.value('(ClaimID)[1]', 'int') AS 'ClaimID',
                NDS.DT.value('(POrderID)[1]', 'int') AS 'POrderID',
                NDS.DT.value('(SiteID)[1]', 'int') AS 'SiteID',
                NDS.DT.value('(FromDate)[1]', 'datetime') AS 'FromDate',
                NDS.DT.value('(ToDate)[1]', 'datetime') AS 'ToDate',
                NDS.DT.value('(ParticularID)[1]', 'int') AS 'ParticularID',
                NDS.DT.value('(Description)[1]', 'varchar(200)') AS 'Description',
                NDS.DT.value('(SubmittedAmount)[1]', 'int') AS 'SubmittedAmount',
                NDS.DT.value('(CreatedDate)[1]', 'datetime') AS 'CreatedDate',
                NDS.DT.value('(ApprovedAmount)[1]', 'int') AS 'ApprovedAmount',
                NDS.DT.value('(ApprovedDate)[1]', 'datetime') AS 'ApprovedDate',
                NDS.DT.value('(Remark)[1]', 'varchar(300)') AS 'Remark',
                NDS.DT.value('(ApproveBy)[1]', 'int') AS 'ApproveBy',                   
                NDS.DT.value('(RowInfo)[1]', 'varchar(20)') AS 'RowInfo'

            FROM 
                @xmlString.nodes('/NewDataSet/DataTable') AS NDS(DT)

        )

        MERGE INTO dbo.ClaimExpenseTRS CET
        USING XmlData x ON CET.ClaimExpenseID = x.ClaimExpenseID
        WHEN MATCHED AND x.RowInfo = 'UPDATE'
           THEN 
             UPDATE SET 
                CET.ClaimID=x.ClaimID,  
                CET.CreatedDate=x.CreatedDate,
                CET.POrderID=x.POrderID,
                CET.SiteID=x.SiteID,
                CET.FromDate=x.FromDate,
                CET.ToDate=x.ToDate,
                CET.ParticularID=x.ParticularID,
                CET.Description=x.Description,
                CET.SubmittedAmount=x.SubmittedAmount,
                CET.ApprovedAmount=x.ApprovedAmount,
                CET.Remarks=x.Remark,
                CET.ApproveBy=x.ApproveBy,
                CET.ApprovedDate=x.ApprovedDate

      WHEN MATCHED AND x.RowInfo = 'DELETE'AND CET.ClaimExpenseID = x.ClaimExpenseID
           THEN DELETE 

        WHEN NOT MATCHED AND x.RowInfo = 'NEW'
           THEN 
              INSERT(ClaimID, CreatedDate, POrderID, SiteID,FromDate,ToDate,ParticularID,                 Description,SubmittedAmount,ApprovedAmount,Remarks,ApproveBy,ApprovedDate)
              VALUES(x.ClaimID,x.CreatedDate,x.POrderID,x.SiteID,x.FromDate,x.ToDate,x. 
              ParticularID,x.Description,x.SubmittedAmount,x.ApprovedAmount,x.Remark,x.                   ApproveBy,x.ApprovedDate);
END 
这是XML字符串

<NewDataSet>
  <DataTable>
     <ClaimExpenseID>5</ClaimExpenseID>
     <ClaimID>1</ClaimID>
     <CreatedDate>2011-08-01T00:00:00+05:30</CreatedDate>
     <POrderID>11</POrderID>
     <SiteID>4</SiteID>
     <FromDate>2011-08-07T00:00:00+05:30</FromDate>
     <ToDate>2011-08-08T00:00:00+05:30</ToDate>
     <NoOfDays>1</NoOfDays>
     <ParticularID>1</ParticularID>
     <Description>test</Description>
     <SubmittedAmount>500</SubmittedAmount>
     <Month>August</Month>
     <Year>2011</Year>
     <POrderNo>PO0002</POrderNo>
     <SiteName>SITE 2</SiteName>
     <ParticulerName>Food</ParticulerName>
     <RowInfo>UNCHANGED</RowInfo>
     <TableRowIndex>3</TableRowIndex>
  </DataTable>
  <DataTable>
    <ClaimID>1</ClaimID>
    <CreatedDate>2011-09-22T00:00:00+05:30</CreatedDate>
    <POrderID>26</POrderID>
    <SiteID>1</SiteID>
    <FromDate>2011-09-22T00:00:00+05:30</FromDate>
    <ToDate>2011-09-30T00:00:00+05:30</ToDate>
    <NoOfDays>8</NoOfDays>
    <ParticularID>1</ParticularID>
    <Description>dinner</Description>
    <SubmittedAmount>200</SubmittedAmount>
    <POrderNo>PO-01</POrderNo>
    <SiteName>ALKAPURI</SiteName>
    <ParticulerName>Food</ParticulerName>
    <RowInfo>NEW</RowInfo>
    <TableRowIndex>4</TableRowIndex>
   </DataTable>
</NewDataSet>

5.
1.
2011-08-01T00:00:00+05:30
11
4.
2011-08-07T00:00:00+05:30
2011-08-08T00:00:00+05:30
1.
1.
测试
500
八月
2011
PO0002
站点2
食物
不变的
3.
1.
2011-09-22T00:00:00+05:30
26
1.
2011-09-22T00:00:00+05:30
2011-09-30T00:00:00+05:30
8.
1.
晚餐
200
PO-01
阿尔卡普里
食物
新的
4.

在第二个数据表中,“起始日期”值为2011-09-22,“截止日期”值为2011-09-30,但当该值插入数据库表中时,它将分别变为2011-09-21和2011-09-29。

这可能是您的+5:30时区吗?这与您的数据库相同,还是您的数据库试图计算出不同时区的时间,并计算出前一天的时间

编辑:我刚刚确认了这一点。如果我将您的日期时间:
2011-09-30T00:00:00+05:30
读入我的机器(位于英国),我会得到
2011-09-29 18:30:00.000

我用于转换的代码是:


select cast(''作为xml).value('xs:dateTime(“2011-09-30T00:00:00+05:30”),'dateTime')

@JHolyhead..当我写select GETDATE()时,它会显示实际的日期和时间…我在印度,印度时区是+5:30在你的管理工作室中运行上面的查询,并告诉我它返回什么。选择cast(''作为xml).value('xs:dateTime(“2011-09-30T00:00:00+05:30”),“datetime”)返回2011-09-29 18:30:00.000,同时选择GETDATE()返回2011-09-22 16:33:35.210可能是您服务器上设置的区域设置。它可以告诉您正确的时间,但仍然设置了错误的时区。我认为MSSQL从服务器BIOS中获取该信息。@JHolyhead..那么在这种情况下该怎么办呢?仍然不明白您的意思。如何知道服务器正在运行的时区???