PCB SQL SERVER 枚举分割函数(枚举值分解函数)
在SQL SERVER字段采用枚举值作为字段后,如果直接查看字段的值是很难判断这个字段的带表什么意思,
在这里介绍如用函数的方法实现枚举值分割,只有分割后才很方便知道枚举值的意思。
一.问题说明
1.如下为:单个枚举值清单如下
十进制带表枚举的值,每个值带表对应的工厂

单枚举:
1带表P1工厂,2带表P2工厂 ----通过对应,一眼看到对应关系
叠加枚举:
3带表P1与P2工厂 ----简单叠加枚举,难度增大了就是不容易找到对应关系
难度再加大一点:
39 带表什么 工厂呢
是不是一时找不到解呀,实际39分解为:1 2 4 32 ,分别带表表P1,P2,P3,P7 四个工厂,
那如何叠加后的枚举值分解呢,这就是下面要解决的问题呢
二.C# 写SQL SERVER 枚举分割函数
public partial class SQLfunction
{
/// <summary>
/// SQL Server 枚举集合分割方法
/// </summary>
/// <param name="EnumNumCount"></param>
/// <returns></returns>
[Microsoft.SqlServer.Server.SqlFunction(
DataAccess = DataAccessKind.Read,
IsDeterministic = true,
Name = "NumSplit",
FillRowMethodName = "NumSplit_FillRow",
TableDefinition = "EnumNumCount int")]
public static IEnumerable NumSplit(SqlInt32 EnumNumCount)
{
List<EnumData> resultDataList = new List<EnumData>();
string bin2 = Convert.ToString((int)EnumNumCount, );
int NoOrderno = ;
for (int i = ; i < bin2.Length; i++)
{
if (bin2[i] == '')
{
resultDataList.Add(new EnumData(NoOrderno, (int)Math.Pow(, bin2.Length - i - )));
NoOrderno++;
}
}
return resultDataList;
} /// <summary>
/// 填充数据方法
/// </summary>
/// <param name="obj"></param>
/// <param name="serialNumber"></param>
/// <param name="stringValue"></param>
public static void NumSplit_FillRow(Object obj, out SqlInt32 No_, out SqlInt32 EnumValue_)
{
EnumData EnumData_ = (EnumData)obj;
No_ = EnumData_.No;
EnumValue_ = EnumData_.EnumValue;
}
/// <summary>
/// 定义返回类型
/// </summary>
public class EnumData
{
/// <summary>
/// 序号,即行号
/// </summary>
public SqlInt32 No { get; set; } /// <summary>
/// 分割后的每个分解后的枚举值
/// </summary>
public SqlInt32 EnumValue { get; set; } public EnumData(SqlInt32 No_, SqlInt32 EnumValue_)
{
No = No_;
EnumValue = EnumValue_;
}
}
}
三.SQL SERVER修改程序集与创建枚举分割函数
alter ASSEMBLY SQLfunctionAssembly
FROM 'D:\SQLClr.dll' --改为自己C#写的dll路径填写
WITH PERMISSION_SET = UNSAFE; --枚举分割函数
CREATE FUNCTION [dbo].[NumSplit](@EnumNumCount [int])
RETURNS TABLE (
[No] [int] NULL,
[EnumValue] [int] NULL
) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SQLfunctionAssembly].[SQLClr.SQLfunction].[NumSplit] --[SQL程序集名].[命名空间.类名].[方法名]
四.枚举分割函数测试
一.测试枚举值33分割
33分解为:1 32 ,分别带表表P1,P7 两个工厂

SELECT EnumValue FROM FP_EMSDB_PUB.dbo.NumSplit(33)
二.测试枚举值39分割
39分解为:1 2 4 32 ,分别带表表P1,P2,P3,P7 四个工厂

SELECT EnumValue FROM FP_EMSDB_PUB.dbo.NumSplit(39)
五.小结
由于枚举值存于存在数据库,写了个函数可以非常方便的查看分解后的值.
但从实际功能出发的话,一般是用C#代码进行枚举值分解,分解后的值再转到UI前台前面展示,
PCB SQL SERVER 枚举分割函数(枚举值分解函数)的更多相关文章
- SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...
- SQL Server为字段添加默认值
SQL Server为字段添加默认值 if not exists ( select * from sys.columns as c join sys.objects as o on c.default ...
- SQL Server 导入excel时“该值违反了该列的完整性约束”错误
SQL Server 导入excel时“该值违反了该列的完整性约束”错误 这个问题看似高大上,仔细分析了一下,ID列怎么会有重复呢? 原来是有很多空行呀!!! 所以导入excel时一定要注意空行的问题 ...
- sql server 自增列,值突然增大1000的情况
sql server 自增列,值突然增大1000的情况 解决方法: 1 打开配置管理器2左面点击sql服务3右面 右键点击SQL Server(MSSQLSERVER) 4点击 启动参数5 在参数 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- PCB SQL SERVER 位运算应用实例
在PCB行业,一个产品可能同时在多个工厂生产,举例:一个产品一条主记录,这条记录中会对应多个工厂的产地,而这个工厂产地个数不确定, 那么如何设计表结构存储这个不确定的工厂呢?这里想到了4个方式存储 一 ...
- PCB SQL SERVER 正则应用实例
我们用过SQL SERVER的都知道,SQL SERVER它本身是不自带正则表达式的,因为没有,所以基本都没用过啊, 但我们在C#中对文本匹配用正则的方式处理非常好用,省得你写一堆代码实现匹配,多简洁 ...
- SQL中一种类似GUID值的函数实现
开发中会需要用到多列值组合成一个ID值的情况.比如做数据清洗的时候,一张表A有五列,分别是医院.科室.医生.职称.电话.面有许多重复的数据需要和另一个表B(和A列相同)做对比.清洗需要做两件事 ...
- SQL Server进阶(十二)常用函数
在SQL 2012基础教程中列出子句是按照以下顺序进行逻辑处理. FROM WHERE GROUP BY HAVING SELECT ORDER BY FROM TableName WHERE Use ...
随机推荐
- 如何在MONO 3D寻找最短路路径
前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ...
- [Java小程序]聊天室——Socket和ServerSocket的使用
这段小代码是因为担任Java助教给刚学习Java的本科大二的小学弟小学妹们指导,他们的实验作业就是编写一个Java聊天室客户端和服务器,为了避免出纰漏,自己事先写了一下. 客户端Ui代码: packa ...
- java一维数组的声明、初始化及排序
public class TestArray { public static void main(String[] args) { /** 数组声明及动态初始化 int a[] = new int[a ...
- 分布式数据库中CAP原理(CAP+BASE)
分布式数据库中CAP原理(CAP+BASE) 传统的ACID 1)原子性(Atomicity): 事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功. 2)一致性(Con ...
- 数据库中间件MyCat学习总结(2)——MyCat-Web原理介绍
Mycat是一个分库分表的基于java开发的数据库中间件,使用过程中需要有一个监控系统,mycat-web应运而生.mycat-web是一个使用SpringMVC + Mybatis的监控平台,使用常 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- [ZJOI2008]杀蚂蚁antbuster
[ZJOI2008]杀蚂蚁antbuster 题目 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试 ...
- 【BZOJ1014】火星人prefix(splay,Hash)
题意: . 思路: ; ..,..]of longint; sum,size,fa,a,b,id,mi:..]of longint; n,m,i,x,y,s,k,j,cnt,root:longint; ...
- PHP array_keys()
定义和用法 array_keys() 函数返回包含数组中所有键名的一个新数组. 如果提供了第二个参数,则只返回键值为该值的键名. 如果 strict 参数指定为 true,则 PHP 会使用全等比较 ...
- Solidworks如何整体缩放零件
比如我有一个飞机模型,当前长度有20000mm,即20M,我想要整体缩放 点击插入-特征-缩放比例 在左侧的框中输入所有要缩放的零部件(如果全部缩放,则全部框选所有零件,就可以把所有零件都放到 ...