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 ...
随机推荐
- [转]Linux中进程内存与cgroup内存的统计
From: http://hustcat.github.io/about/ Linux中进程内存与cgroup内存的统计 在Linux内核,对于进程的内存使用与Cgroup的内存使用统计有一些相同和不 ...
- 诊断:Goldengate OGG-01163 Bad column length
故障现象: OGG- Bad column length () specified . 原因:源端修改了字段长度.虽然源端和目标端的长度已经通过DDL语句修改到一致,在extract进程未重启的情况下 ...
- css去掉div的滚动条
懒得讲原理了,直接贴代码: css部分: .slide-box { margin-top: 200px; display: -webkit-box; overflow-x: scroll; overf ...
- iconfig1
#include<iostream> using namespace std; //测试 template 里面是否还可以有 template class alloc{ }; templa ...
- apacheAB测试指标
在进行性能测试过程中有几个指标比较重要: 1.吞吐率(Requests per second) 服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数.某个并 ...
- 3.1.1 简单的 grep
grep 最简单的用法就是使用固定字符串: [many@avention Desktop]$ who many :0 2019- ...
- Android三角标签View:TriangleLabelView
Android三角标签View:TriangleLabelView 在一些商城.产品推销类APP中,如淘宝.京东.电影门票销售.商品降价促销这类的APP,常常会在其APP中看到,某些商品的左上角 ...
- mongodb replica set 添加/删除节点方法--http://www.ii123.com/jc/bc/bczh/258948.html
replica set多服务器主从,添加,删除节点,肯定会经常遇到的.下面详细说明一下,添加,删除节点的2种方法. 一,利用rs.reconfig,来添加,删除节点 1,添加节点 代码如下 re ...
- Codeforces Round #219 (Div. 2) D题
D. Counting Rectangles is Fun time limit per test 4 seconds memory limit per test 256 megabytes inpu ...
- python爬取数据保存到Excel中
# -*- conding:utf-8 -*- # 1.两页的内容 # 2.抓取每页title和URL # 3.根据title创建文件,发送URL请求,提取数据 import requests fro ...