[英]SQL Server XQuery modify
我正在編寫T-SQL UDF,並嘗試使用游標獲取的值修改xml變量。 該代碼可以很好地執行,但是不會對xml變量進行修改。
代碼如下:
CREATE FUNCTION GetDateBlockXmlFromTable(@occupieddates occupieddates READONLY)
RETURNS XML
AS
BEGIN
DECLARE @xmlresult xml;
DECLARE @datefrom datetime, @dateto datetime;
SELECT @xmlresult = '<root><DateBlocks/></root>';
DECLARE GetDateBlockXmlFromTable_Cur
CURSOR FOR
SELECT DateFrom, DateTo FROM @occupieddates
OPEN GetDateBlockXmlFromTable_Cur
FETCH NEXT FROM GetDateBlockXmlFromTable_Cur INTO @datefrom, @dateto
WHILE @@FETCH_STATUS = 0
BEGIN
SET @xmlresult.modify('insert <DateBlock><FirstDay>"{sql:variable("@datefrom")}"</FirstDay><EndDay>"{sql:variable("@dateto")}"</EndDay></DateBlock> as last into (/DateBlocks)[1]');
FETCH NEXT FROM GetDateBlockXmlFromTable_Cur INTO @datefrom, @dateto
END
CLOSE GetDateBlockXmlFromTable_Cur
DEALLOCATE GetDateBlockXmlFromTable_Cur
RETURN @xmlresult;
END
占用日期只讀輸入表如下所示:
CREATE TYPE occupieddates AS TABLE
(
DateFrom datetime,
DateTo datetime,
)
只需更改
as last into (/DateBlocks)[1]
至
as last into (/root/DateBlocks)[1]
您可以考慮將結果變量聲明更改為SELECT @xmlresult = '<DateBlocks/>'
。
而且您也可以考慮使用for xml
語句:
CREATE FUNCTION GetDateBlockXmlFromTable(@occupieddates occupieddates READONLY)
RETURNS XML
AS
BEGIN
DECLARE @xmlresult xml;
set @xmlresult = (
select
(select
'"' + convert(varchar, DateFrom, 126) + '"' as FirstDay,
'"' + convert(varchar, DateTo, 126) + '"' as EndDay
from
@occupieddates
for xml path('DateBlock'), type)
for xml path('DateBlocks')--, root('root') -- depending on need
)
return @xmlresult;
END
好像你應該改變
...into (/DateBlocks)...
至
...into (/root/DateBlocks)...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.