0

我正在尝试在 SQL Server 代理作业中使用XML.modify修改 XML 值。我正在使用 SQL Server 2008。这是我的代码...

DECLARE @temp XML;
DECLARE @newname VARCHAR(50);
SELECT @temp = CAST(ExtensionSettings AS XML) FROM [ReportServer].[dbo].[Subscriptions] WHERE SubscriptionID = 'a2e1dd4e-5f65-4f0e-bc5a-8e58d21d7292';
SET @newname = 'Monthly_Data_' + CONVERT(VARCHAR(7), DATEADD(day, -1, GETDATE()), 120);

SET @temp.modify('replace value of (/ParameterValues/ParameterValue/Value[../Name/text()="FILENAME"]/text())[1] with sql:variable("@newname")');

UPDATE [ReportServer].[dbo].[Subscriptions] SET ExtensionSettings = CAST(@temp AS varchar(2000)) WHERE SubscriptionID = 'a2e1dd4e-5f65-4f0e-bc5a-8e58d21d7292';

如果我只是在查询窗口中运行此代码,它运行良好,但是当我将其作为工作中的一个步骤运行时,工作会失败。问题似乎出在线路上...

SET @temp.modify('replace value of (/ParameterValues/ParameterValue/Value[../Name/text()="FILENAME"]/text())[1] with sql:variable("@newname")');

因为如果我将其注释掉并运行该作业,它就可以完成。

XML.modify 不能在工作中使用吗?我错过了什么?!

谢谢

4

1 回答 1

0

我今天大部分时间都在做这件事,终于发布了我的问题,并迅速找到了答案!

我终于发现了如何查看作业运行历史记录(右键单击作业,查看历史记录)。那里提到 QUOTED_IDENTIFIER 设置错误。谷歌搜索后来告诉我代理作业默认关闭 QUOTED_IDENTIFIER ( https://dba.stackexchange.com/questions/52802/sql-server-agent-quoted-identifier )。

我添加了行...

SET QUOTED_IDENTIFIER ON

到我工作的一步,它开始工作了!

于 2014-11-03T22:52:21.997 回答