SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)学到了吗

随心笔谈10个月前发布 admin
243 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章主要介绍了如何在SQL Server中使用C#语言扩展事务支持的功能。文章定义了一个`UserDefinedFunctions`类,该类包含两个静态字段`_listValue`和`_listGroup`,分别用于存储当前组的值和组的键。文章还定义了三个静态方法: 1. `GetPrevMemberValue`:用于获取当前组上一条记录的值,并在组发生变化时重置值。2. `InitKey`:用于初始化并行键,并返回布尔值。3. `DisposeKey`:用于释放并行键。 文章的核心内容是实现SQL Server的事务支持功能,通过扩展C#语言来实现并行键的管理。

using System;

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 _listValue=new System.Collections.Generic.Dictionary ();

    // 保存当前组

    private static System.Collections.Generic.Dictionary _listGroup =new System.Collections.Generic.Dictionary ();

    ///

    /// 获取当前组上条记录数值

    ///

    /// 并发键

    /// 当前组

    /// 当前组当前值

    ///

    [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 ;

        }

    }

};

© 版权声明

相关文章