Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server 修改XML-SMALLDATETIME_Sql Server_Xml_Sql Server 2012_Smalldatetime_Xml.modify - Fatal编程技术网

Sql server 修改XML-SMALLDATETIME

Sql server 修改XML-SMALLDATETIME,sql-server,xml,sql-server-2012,smalldatetime,xml.modify,Sql Server,Xml,Sql Server 2012,Smalldatetime,Xml.modify,您好,我正在SQL server中使用XML,并尝试对SMALLDATETIME变量使用modify函数,但它没有给我期望的结果 DECLARE @Shift_StartDate SMALLDATETIME = '2017-06-05 09:00:00'; DECLARE @Shift_EndDate SMALLDATETIME = '2017-06-05 09:30:00'; DECLARE @x XML = '<dbo.tblXXXX StartDate="" EndDate=

您好,我正在SQL server中使用XML,并尝试对SMALLDATETIME变量使用modify函数,但它没有给我期望的结果

    DECLARE @Shift_StartDate SMALLDATETIME = '2017-06-05 09:00:00';
DECLARE @Shift_EndDate SMALLDATETIME = '2017-06-05 09:30:00';
DECLARE @x XML = '<dbo.tblXXXX StartDate="" EndDate=""  />'
SET @x.modify('replace value of (/*[1]/@StartDate) with sql:variable("@Shift_StartDate")')
SET @x.modify('replace value of (/*[1]/@EndDate) with sql:variable("@Shift_EndDate")')

SELECT @X
输出为。结尾追加了“.000”。我怎样才能摆脱它们

<dbo.tblXXXX StartDate="2017-06-05T09:00:00.000" EndDate="2017-06-05T09:30:00.000" />
我希望上面的输出如下图所示,因为这是我运行下面的查询时返回的结果

<dbo.tblXXXX StartDate="2017-06-05T09:00:00" EndDate="2017-06-05T09:30:00" />

DECLARE @ActualXml XML;

SET @ActualXml = (SELECT 
                     [StartDate], 
                     [EndDate]
                     FROM [dbo].[tblXXXX]
                     WHERE UniqueId = 8124X
                     FOR XML AUTO)
SELECT @ActualXml
[StartDate]和[EndDate]的数据类型为“SMALLDATETIME”

我希望XMLModify函数返回不带.000的相同结果

请建议。 提前谢谢
Rao

您可以将该值强制转换为xs:string,并使用XQuery的子字符串切断该字符串:

DECLARE @Shift_StartDate SMALLDATETIME = '2017-06-05 09:00:00';
DECLARE @Shift_EndDate SMALLDATETIME = '2017-06-05 09:30:00';
DECLARE @x XML = '<dbo.tblXXXX StartDate="" EndDate=""  />'
SET @x.modify('replace value of (/*[1]/@StartDate) with substring(xs:string(sql:variable("@Shift_StartDate")),1,19)')
SET @x.modify('replace value of (/*[1]/@EndDate) with sql:variable("@Shift_EndDate")')

SELECT @X
结果

<dbo.tblXXXX StartDate="2017-05-06T09:00:00" EndDate="2017-05-06T09:30:00.000" />

StartDate没有.000,而EndDate没有变化

StartDate的数据类型是什么?它是SMALLDATETIME。我也会更新这个问题。默认情况下,它是returningwhich,仅为.00,我是否遗漏了什么?我的问题是XML修改函数,它在末尾添加了.000。