在本文中,您将会了解到关于SQL2005CLR函数扩展-深入环比计算的详解的新资讯,同时我们还将为您解释sql环比怎么算的相关在本文中,我们将带你探索SQL2005CLR函数扩展-深入环比计算的详解的
在本文中,您将会了解到关于SQL2005CLR函数扩展-深入环比计算的详解的新资讯,同时我们还将为您解释sql环比怎么算的相关在本文中,我们将带你探索SQL2005CLR函数扩展-深入环比计算的详解的奥秘,分析sql环比怎么算的特点,并给出一些关于MySQL 环比计算、SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程、sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复、Sql2000与Sql2005共存安装的解决方法的实用技巧。
本文目录一览:- SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)
- MySQL 环比计算
- SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程
- sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复
- Sql2000与Sql2005共存安装的解决方法
SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)
此类问题还可以延伸到类似进销存的批次计算中,这也要关注其他历史记录来决定当前某条记录的状态。sql语句无法简单实现mdx语句的类似功能,必须得用交叉表关联来对比。这里我们用CLR函数来实现mdx语句的类似语法。在select的时候把得到过的做个缓存就可以了。效率应该可以提高不少。clr的代码如下,编译为TestFun.dll,复制到sql服务器的文件目录下。
--------------------------------------------------------------------------------
using System.Data;
using System.Data.sqlClient;
using System.Data.sqlTypes;
using Microsoft.sqlServer.Server; public partial class UserDefinedFunctions
{ // 保存当前组当前值
private static System.Collections.Generic.Dictionary
// 保存当前组
private static System.Collections.Generic.Dictionary
/// 获取当前组上条记录数值
///
/// ///
aram name="currentGroup"> 当前组
///
aram name="currentValue"> 当前组当前值
///
[Microsoft.sqlServer.Server.sqlFunction ]
public static sqlString GetPrevMemberValue(sqlString key,sqlString currentGroup,sqlString currentValue)
{
if (key.IsNull || currentGroup.IsNull) return sqlString .Null;
try
{
sqlString prevMemberValue = _listValue[key.Value]; // 组变更
if (_listGroup[key.Value] != currentGroup.Value)
{
prevMemberValue = sqlString .Null;
_listGroup[key.Value] = currentGroup.Value;
}
// 值变更
_listValue[key.Value] = currentValue; return prevMemberValue;
}
catch
{
return sqlString .Null;
}
}
///
/// 初始化并发键
///
/// ///
[Microsoft.sqlServer.Server.sqlFunction ]
public static sqlBoolean InitKey(sqlString key)
{
try
{
_listValue.Add(key.Value,sqlString .Null);
_listGroup.Add(key.Value,string .Empty);
return true ;
}
catch
{
return false ;
}
}
///
/// 释放并发键
///
/// ///
[Microsoft.sqlServer.Server.sqlFunction ]
public static sqlBoolean disposeKey(sqlString key)
{
try
{
_listValue.Remove(key.Value);
_listGroup.Remove(key.Value);
return true ;
}
catch
{
return false ;
}
}
};
--------------------------------------------------------------------------------
部署和生成自定义函数,其中考虑到并发,我们还是需要一个并发键来表达当前查询
--------------------------------------------------------------------------------
--
go
CREATE FUNCTION dbo. xfn_GetPrevMemberValue
(
@key nvarchar ( 255),
@initByDim nvarchar ( 255),
@currentValue nvarchar ( 255)
)
RETURNS nvarchar ( 255)
AS EXTERNAL NAME TestForsqlCLR. [UserDefinedFunctions]. GetPrevMemberValue
go
CREATE FUNCTION dbo. xfn_initKey
(
@key nvarchar ( 255)
)
RETURNS bit
AS EXTERNAL NAME TestForsqlCLR. [UserDefinedFunctions]. InitKey
go
CREATE FUNCTION dbo. xfn_disposeKey
(
@key nvarchar ( 255)
)
RETURNS bit
AS EXTERNAL NAME TestForsqlCLR. [UserDefinedFunctions]. disposeKey