bpo*_*ter 7 c# sql-server clr sqlclr user-defined-functions
有没有办法为SQL Server创建一个CLR用户定义函数,它返回多个值而不使用表值函数语法?例如,假设我要执行坐标转换,例如:
[SqlFunction()]
public void ConvertCoordinates(SqlDouble x, SqlDouble y, SqlDouble z, out SqlDouble r, out SqlDouble t, out SqlDouble p)
{
r = new SqlDouble(Math.Sqrt((x.Value*x.Value)+(y.Value*y.Value)+(z.Value*z.Value)));
t = new SqlDouble(Math.Acos(r.Value / z.Value));
p = new SqlDouble(Math.Atan(y.Value / x.Value));
}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?在这种情况下,表值函数似乎不合适,因为计算永远不会产生多个输出行.使用标量值函数语法,我将不得不编写三个不同的函数来执行计算并分别调用它们.鉴于我的实际用例,这是非常不切实际的.
我意识到上述逻辑可以使用纯T-SQL完成; 我的实际用例更复杂,但仍然只会导致单行具有多个相互依赖的输出值.
那么,底线,是否可行?我不认为是,但人们可以希望.如果它是偶然的可行,那么T-SQL看起来会是什么样的呢?
由于您已经尝试了 CLR,因此您可以创建自己的 CLR 类型,用它可以做各种疯狂的事情。作为一个实际示例,原生空间类型就是以这种方式实现的,HierarchyID 也是如此。一旦定义了自己的类型,就可以让函数返回它。如果获取单个组件(如果我可以假设您的情况是半径、theta 和 phi),请在返回此类的类型上创建方法。
| 归档时间: |
|
| 查看次数: |
2526 次 |
| 最近记录: |