十年河东,十年河西,莫欺少年穷

学无止境,精益求精

今天是数据库脚本类的代码,所以不想过多阐述

如下数据表:

create table Card(
Id int identity(1,1) primary key,
CardNo varchar(50) unique not null,
Status bit default(0)
)

上述表中有自增长字段Id,现在要求字段 CardNo 和自增长Id 相关联,譬如,当Id为1时,CardNo 应该为 Card00001,当Id为15时,CardNo应该为: Card00015 ,要求通过触发器或存储过程实现?

其中触发器实现如下:

create TRIGGER [dbo].[TGR_Card]
ON [dbo].[Card]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; -- Insert statements for trigger here、
DECLARE @Id bigint
SELECT @Id = Id FROM INSERTED UPDATE Card
SET CardNo = CASE
WHEN LEN(@Id) = 1 THEN 'Crad0000000' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 2 THEN 'Crad000000' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 3 THEN 'Crad00000' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 4 THEN 'Crad0000' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 5 THEN 'Crad000' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 6 THEN 'Crad00' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 7 THEN 'Crad0' + CAST(@Id AS varchar(20))
WHEN LEN(@Id) = 8 THEN 'Crad' + CAST(@Id AS varchar(20))
END
WHERE orderId = @Id END

如果用存储过程如何实现呢?

存储过程实现就需要考虑如下因素了:

1、存储过程需要程序调用执行

2、如果同一时刻多条数据插入数据库时,就应该考虑到数据并发,因此,采用存储过程实现应该避免并发

那么,存储过程应该怎么实现呢?

我们都知道,防止并发我们采用乐观锁或悲观锁,在此不做演示了,总之,要加上版本字段 ,数据库类型:TimeStamp!

关于并发的避免大家可参考:http://www.cnblogs.com/chenwolong/p/Lock.html

http://www.cnblogs.com/chenwolong/p/BF.html

@陈卧龙的博客

利用数据库触发器让字段与自增长Id相关联的更多相关文章

  1. ThinkPHP利用数据库字段做栏目的无限分类

    一直以来对cms后台的栏目管理不太理解,尤其是子栏目顶级栏目这种关系,通过网上的搜索与自己的摸索,实现方法如下(原理是利用数据库的path字段): 1.建立简单的栏目表: CREATE TABLE ` ...

  2. 关于MySql中自增长id设置初始值

    在MySQL数据库,设置了id为自增长类型,但由于程序还处于开发阶段,很容易的会产生错误数据,然后就直接删除了,可是id的自增长值没有跟着减少,这里提示: 如果表中数据没有用,直接删除了数据,自动增长 ...

  3. PowerDesigner连接Oracle数据库建表序列号实现自动增长

    原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...

  4. Hibernate 注解 没有加@Column一样会在数据库创建这些字段

    Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...

  5. 利用数据库视图实现WEB查询敏感信息接口动态脱敏

    前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...

  6. Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

    Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子   时间:2012-11-20 17:54:02   Java 通过JDBC查询数据库表结构(字段名称,类型,长 ...

  7. Django数据库设计中字段为空的方式

    今天在做数据库设计的时候,设计了如下User表,其中我把email和phone字段设置为允许为空: class User(models.Model): username = models.CharFi ...

  8. SQL Server数据库自增字段正确的插入值的描述

    我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...

  9. MySQL数据库添加一个字段

    MySQL数据库添加一个字段 1.添加一个字段 alter table tableName add 列名  数据类型; 2.添加一个字段设置默认值 alter table tableName add ...

随机推荐

  1. Intent调用常见系统组件

    // 调用浏览器 Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail"); Intent intent = ...

  2. [Android GMS 认证] keystore/keymaster/Attestation的问题

    首先确定写入key,操作如下: 检查 /persist/data/sfs 目录下是否有key文件存在     adb shell ls -la /persist/data/sfs 做过key prov ...

  3. 13.1、多进程:进程锁Lock、信号量、事件

    进程锁: 为什么要有进程锁:假如现在有一台打印机,qq要使用打印机,word文档也要使用打印机,如果没有使用进程锁,可能会导致一些问题,比如QQ的任务打印到一半,Word插进来,于是打印出来的结果是各 ...

  4. [20171106]修改show spparameter的显示宽度.txt

    [20171106]修改show spparameter的显示宽度.txt --//很多年前做的,修改show parameter的显示宽度.--//链接: [20121023]改变show para ...

  5. Configure Monit on AWS CentOS7 to guard Squid proxy

    Install Monit:sudo -iamazon-linux-extras install epelyum -y install monit Config monit: vim /etc/mon ...

  6. js判断IE浏览器及版本

    function isIE(_version){ _version = _version || ''; var b = document.createElement('b'); b.innerHTML ...

  7. VS2015 无法启动 IIS Express Web 服务器 解决方案

    VS2015 IIS Express 无法启动Web 解决方案 [亲测已成功] 1.我的电脑—管理—事件查看器—Windows日志—应用程序: 详细信息会提示你:[模块 DLL C:\Program ...

  8. Windows Server 2008 R2终端服务器激活方法

    本文描述了如何激活Windows Server 2008 R2的终端服务器的方法. 目录: 1.Windows Server  2008 R2终端服务器的安装 2.Windows Server  20 ...

  9. MySQL面试题之如何优化一条有问题的SQL语句?

    如何优化一条有问题的sql语句? 针对sql语句的优化.我们可以从如下几个角度去分析 回归到表的设计层面,数据类型选择是否合理 大表碎片的整理是否完善 表的统计信息,是不是准确的 审查表的执行计划,判 ...

  10. 开启远程Windows系统3389端口

    1.Win7.Win2003.XP系统REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDen ...