SQL viewId 比较好看的 Id
更新 : 2019-06-29
identity column 的局限是, 它只可以在一个 table 使用,而且它只能随着 insert 产生
另一个方法是用 SEQUENCE, sql server 2012 的功能
https://docs.microsoft.com/en-us/ef/core/modeling/relational/sequences
https://www.talkingdotnet.com/use-sql-server-sequence-in-entity-framework-core-primary-key/
https://blog.csdn.net/m0_38002798/article/details/78904102
它的好处是可以跨 table, 而且不需要 insert 也可能产生. 但是也有不足的地方,就是不支持 transaction , 无法 rollback
如果你的 running number 允许跳号, 那么 SEQUENCE 是最佳选择.
如果以上 2 个无法满足需求,那么就得自己通过表,锁表的方式去实现了.
有时候我们希望 Id 要好看一些,比如 Id=1 -> Id=T000001
refer :
http://www.kodyaz.com/t-sql/custom-sequence-string-as-sql-identity-column.aspx
http://www.sqlteam.com/article/custom-auto-generated-sequences-with-sql-server
方法有很多,我目前选择的方式是使用触发器在插入之后更新
我们把这个好看一点的Id称为 viewId 吧。
先做一个方法来格式化Id
调用 viewId = dbo.getViewId('T',CAST(inserted.Id as nvarchar(50)),6,'0');
drop function dbo.getViewId;
create function [dbo].[getViewId] (
@Prefix nvarchar(10),
@Id int,
@Length int,
@PaddingChar char(1) = ''
)
returns nvarchar(MAX)
as
begin return (
select @Prefix + RIGHT(REPLICATE(@PaddingChar, @Length) + CAST(@Id as nvarchar(10)), @Length)
) end
针对某个表写入触发器逻辑
drop trigger OrdersAfterInsert;
create trigger OrdersAfterInsert on [dbo].[Orders]
for insert
as
update Orders set viewId = dbo.getViewId('O', CAST(inserted.Id as nvarchar(50)),6,'')
from Orders inner join inserted on Orders.Id= inserted.Id;
go
如果表已经存在数据的话,要更新哦
update Orders set viewId = dbo.getViewId('O', CAST(Id as nvarchar(50)),6,'');
创建column and UNIQUE
alter table Orders add viewId nvarchar(50) null;
create unique nonclustered index [UNIQUE_Orders_viewId]
on [dbo].[Orders]([viewId] asc) where ([viewId] IS NOT NULL AND [viewId] IS NOT NULL);
使用 Entity Framewrok的话可以把这个数据标签为 Computed.
public class Order
{
[Key]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string viewId { get; set; }
}
以上.
SQL viewId 比较好看的 Id的更多相关文章
- sql实现通过父级id查询所有的子集
通过sql实现传入父级id查询出所有的子集 最近刚好有个业务需要这样实现个功能,就是在点击查询列表详情的时候只会传入父级id,而详情得渲染出所有子集,那么做法有很多,可以直接通过代码递归查询去实现, ...
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
- 多线程处理sql server2008出现Transaction (Process ID) was deadlocked on lock resources with another process and has been chose问题
多线程处理sql server2008某个表中的数据时,在Update记录的时候出现了[Transaction (Process ID 146) was deadlocked on lock reso ...
- SQL注入-攻入Apple ID钓鱼网站实录
之前写的一篇利用SQL注入方式攻击钓鱼网站的文章,现在在博客园再分享一下. 下午,朋友发了一条朋友圈,内容大概这样: 大体就是她的iPhone丢了,收到了钓鱼短信,多么熟悉的套路,如下: 还好她比较机 ...
- mybatis 针对SQL Server 的 主键id生成策略
SQL Server中命令: select newId() ,可以得到SQL server数据库原生的UUID值,因此我们可以将这条指令写到 Mybatis的主键生成策略配置selectKey中. ...
- 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .
parentid是1就是id为1的公司的子公司 如图 查询出所有的信息后 由于我要呈现的是parentName 不是parentId所以想问下SQL语句怎么写 谢谢啦~~:) 解法: SELECT s ...
- [经典SQL语句]根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回
树形表结构: id parentID isDel 1 0 0 2 1 0 3 1 1 4 2 0 5 2 0 一)根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回 ID=,需要返回的结果(条件 ...
- sql指定插入自增长id的数据
SET IDENTITY_Insert [Tag.V2].[dbo].[Members_EnAccount] ON; insert into [Tag.V2].[dbo].[Members_EnAcc ...
- SQL Server 存储过程自定义生成ID号
* FROM sys.tables WHERE name=N'EmployeeNo_Identity') DROP TABLE EmployeeNo_Identity GO CREATE TABLE ...
随机推荐
- 在EF中执行SQL语句
你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除一组记录,如果按照正常的流程 ...
- vector的含义
数学中,vector(向量)表示一个量,由大小和方向构成.比如坐标中的一个带箭头的线段 -- 它1厘米长,正弦值六分之一π(30度角). 计算机的c++.java中,vector表示一种一维的数组.比 ...
- 二分图的最大匹配-hdu-3729-I'm Telling the Truth
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3729 题目意思: 有n个学生,老师询问每个学生的排名,每个学生都告诉了一个排名区间,求可能的最多的学 ...
- Android Studio Gradle 缓存目录设置
======================================================== 笔者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www. ...
- 要缩小通过两个触摸点的观点(iOS)
于AppDelegate.m档,创建一个视图控制器 #import "MAYAppDelegate.h" #import "MAYViewController.h&quo ...
- VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...
- 重叠I/O之事件通知
在 Winsock 中,重叠 I/O(Overlapped I/O)模型能达到更佳的系统性能,高于select模型.异步选择和事件选择三种.重叠模型的基本设计原理便是让应用程序使 用一个重叠的数据 ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- Android四大组件——Service
Service相关链接 Service初涉 Service进阶 Service精通 Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行, ...
- 第三章:真正弄清楚一个Mod的组织结构
<基于1.8 Forge的Minecraft mod制作经验分享> 首先看看一个mod的文件结构,懂Java的应该都看得懂: src/main/ --java/com.xxxxxxxx.x ...