从SQL Server中的SQLCLR存储过程返回的Access SqlXml

时间:2017-04-11 15:12:43

标签: c# sql .net xml sqlclr

我有一些C#代码(SQLCLR),它将XML文件从本地机器读入流并以SQLXML形式返回SQL:

C#代码

 Stream str = File.OpenRead(xmlFilePath);
 sqlXMLToReturn = new SqlXml(str);

来自SQL Server 2014的SQL CLR调用:

DECLARE @ResultForPos xml
EXEC @ResultForPos = spGetXmlForFile
SELECT @ResultForPos

当我从Visual Studio 2015中的SQL Server对象资源管理器调试上述SQL脚本时,我的C#代码中的断点会受到影响。在C#代码中没有引发异常。但是在运行脚本后,我在SQL Server中收到以下错误。

  

Msg 206,Level 16,State 2,Procedure spWcfCall,Line 43
  操作数类型碰撞:int与xml不兼容

我做错了什么?我是否必须执行sqlXMLToReturn.Value并返回一个字符串而不是SQLXML。

1 个答案:

答案 0 :(得分:0)

存储过程,无论它们是纯T-SQL还是SQLCLR,总是返回INT / SqlInt32。如果您想传回XML / SqlXml,则需要使用OUTPUT / out / ref参数。

最后,语法应类似于以下内容:

EXEC dbo.spGetXmlForFile @OutParamName = @ResultForPos OUTPUT;