Hy,
几个月前我发布了一个关于 CLR 用户定义聚合的问题post.
这就像一个魅力。但现在我想使用 sql_variant 类型的两个参数来实现完全相同的功能。
就像我之前的文章一样,这两个函数是 sMax 和 sMin,并且将根据第二个值返回第一个值。
我发现sql_variant类型是C#中的对象类型。但我很难积累和比较对象。
在不知道类型的情况下比较这两个对象的最佳选择是什么?
使用时SQL_VARIANT
/ object
,您可以使用以下方法确定类型GetType()
方法如下:
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = false, IsPrecise = true)]
public static SqlBoolean GetIfSmallInt(object SomeValue)
{
return (SomeValue.GetType() == typeof(SqlInt16));
}
并使用以下方法测试它:
DECLARE @DateTime DATETIME = GETDATE();
SELECT dbo.GetIfSmallInt(@DateTime);
-- 0
DECLARE @SmallInt SMALLINT = 5;
SELECT dbo.GetIfSmallInt(@SmallInt);
-- 1
请记住,使用SQL_VARIANT
/ object
有明显的性能损失。仅在绝对需要时才使用它。如果您只需要传入 INT / SMALLINT / BIGINT,则使用BIGINT
/ SqlInt64
作为输入参数类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)