我有一个无法修改的存储过程,这个存储过程的结果是正常的select语句如下:
CREATE PROCEDURE LockedProcedure
AS
BEGIN
SELECT * FROM COLORS_TABLE
END
我的问题是我需要将结果作为XML结果获取,就像select语句在提供“FOR XML”时返回但没有修改过程本身一样,也许我们可以创建另一个存储过程来调用它或用户定义的函数。
这是我们无法修改的程序示例,因为它已被锁定。
如何将结果作为XML结果而不是XML文件...我不希望硬盘上有任何物理文件。
感谢。
答案 0 :(得分:0)
解决方案1)
INSERT INTO #Tmp EXEC SPName
将存储过程结果插入临时表。FOR XML
与SELECT
命令结合使用,从临时表中以xml的形式获取结果。解决方案2)
创建一个CLR用户定义函数来执行存储过程并使用BCL工具将结果转换为xml。
答案 1 :(得分:0)
我遇到了类似的问题,但在我的情况下,编辑存储过程是可能的。即使OP提到存储过程被锁定,我仍然想在这里发布这个解决方案给其他偶然发现它的人。此解决方案假定存储过程使用动态SQL来选择某些数据,但可以很容易地适应非动态SQL情况。
然后将其添加到存储过程的末尾,作为运行动态SQL的替代方法:
IF @lp_ReturnAsXML = 1
BEGIN
DECLARE @l_XML XML
SET @l_SQL = 'SET @l_XML = (SELECT * FROM ( ' +
@l_SQL + '
) d FOR XML RAW)'
EXEC sp_executesql @l_SQL, N'@l_XML XML OUTPUT', @l_XML = @l_XML OUTPUT
SELECT @l_XML
END
现在这样的事情应该有效:
DECLARE @table TABLE
(
Results XML
)
INSERT INTO @table
EXEC p_MyStoredProc ..., @lp_ReturnAsXML = 1