我正在尝试使用SSIS中启动的SQL任务来更新报告订阅(该任务将通过早期的脚本传递各种参数)。
我已经找到了一些文档,甚至可以更改记录中的参数,但是当我实际运行输出作业时,它说它是有效的,但是即使我用相同的值替换,也没有任何输出。 / p>
我怀疑问题是由于相当随机的原因导致的格式化错误。我一直在将xml记录(报表服务器将其存储为ntext)粘贴到XML VS代码选项卡中。在编辑记录之前,它将单行输出,并且在我进行更新后,我将不得不对其进行格式化,当我粘贴到同一选项卡中时,它将自动格式化。如果我没有完成更新(只需通过UI重新订阅报告),它就会返回到一行复制粘贴
我在这上面跳了几圈。虽然我发现的大多数文档似乎都暗示我可以正常更新该字段(Set blah ='thing'),但是如果这样做的话,它就会中断(直截了当地说,如果我拉起XML格式是不正确的)用户界面中的订阅)。
由于该字段是ntext,所以我已经开始将整个内容转换为ntext。这样可以使UI正常运行,但是会导致问题的出现。作业运行完整,没有任何输出,现在粘贴到vscode时会自动格式化,我可以进入UI并单击“应用”并租用我的密码以正确设置值(在我完成该操作后即可,并且它会预先填入我通过的值)
我只是为了测试而加入了COLLATE段,但这似乎并没有改变任何东西。
这是我当前正在运行的
UPDATE [ReportServer].[dbo].[Subscriptions]
SET Parameters =
CAST('<ParameterValues>
<ParameterValue>
<Name>Region</Name>
<Value>'+
(Select Region from [ReportServer].[dbo].[ParamOvershorts])
+'</Value>
</ParameterValue>
<ParameterValue>
<Name>GMName</Name>
<Value>'+
(Select GMName from [ReportServer].[dbo].[ParamOvershorts])
+'</Value>
</ParameterValue>
<ParameterValue>
<Name>EndDate</Name>
<Value>2/8/2019 12:00:00 AM</Value>
</ParameterValue>
<ParameterValue>
<Name>StartDate</Name>
<Value>2/1/2019 12:00:00 AM</Value>
</ParameterValue>
</ParameterValues>' COLLATE Latin1_General_100_CI_AS_KS_WS AS ntext)
where SubscriptionID = 'ID is here'
预期输出应为带有新参数的报告。
实际输出是说作业运行成功(因此添加了事件),但没有输出。
编辑-
找到了解决方案,请参见下文
答案 0 :(得分:1)
解决了。代码优先-
UPDATE Subscriptions
SET Parameters =(
SELECT REPLACE(CAST(Parameters as varchar(1000)),'GMPARAMETER', (select gmname from ParamOvershorts)) from Subscriptions
) WHERE SubscriptionID = ID GOES HERE
无论类型/格式有什么问题,replace函数都不会破坏它,因此,与在查询中没有实际的Param xml块一样,我首先通过用通用名称(GMPARAMETER)替换所有参数来准备预订(在这种情况下),然后使用replace函数翻转参数,执行报告,然后将参数翻转回通用名称,以便下次可以找到它。
并非完全理想,因为我正在执行大量替换操作,而不是每次都完全输入我想要的内容,并且我需要通过首先输入并放入占位符值来手动准备每个报告,但是正在工作。
我仍然很想知道为什么最初的解决方案失败了。