sql-server - SQL Server 触发器问题

标签 sql-server sql-server-2005

我绝不是一个 SQL 程序员,我正在努力完成一些我很确定以前已经做过一百万次的事情。

我试图在每次插入新客户时在 sql 中自动生成客户编号,但触发器(或 sp?)只有在至少输入名字、姓氏和另一个称为案例编号的值时才会起作用。如果缺少任何这些字段,系统会生成错误。如果满足条件,系统会生成并向该客户分配一个唯一 ID,该 ID 以字母 GL- 开头,然后使用 5 位数字,因此客户 John Doe 为 GL-00001,Jane Doe 为 GL-00002。

如果我要求太多,我很抱歉,但我基本上是一个选择插入更新的人,仅此而已,所以提前感谢您的帮助。

最佳答案

如果我处于这种情况,我会:

--更改表,使名字、姓氏和案例编号为必填(NOT NULL)列。在将记录提交到数据库之前,在应用程序端处理必填字段的检查。

--如果尚不存在,请将标识列添加到客户表中。

--向客户表添加一个持久计算列,该表会将标识列格式化为所需的 GL-00000 格式。

/* Demo computed column for customer number */
create table #test (
    id int identity,
    customer_number as 'GL-' + left('00000', 5-len(cast(id as varchar(5)))) + cast(id as varchar(5)) persisted,
    name char(20)
)

insert into #test (name) values ('Joe')
insert into #test (name) values ('BobbyS')

select * from #test

drop table #test

这应该可以满足您的要求,而无需引入触发器的开销。

关于sql-server - SQL Server 触发器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079091/

相关文章:

sql-server - 在 MS SQL 中使用 HASHBYTES 比较哈希密码

sql-server - 写SqlTableData : The given value of type String from the data source cannot be converted to type bit of the specified target column

sql-server - Ruby 连接到 SQL Server

sql-server - 当child id包含 '.'时sql server中的分层排序

sql-server-2005 - 如何加快运行速度非常慢的 SSIS 传输服务器对象任务?

c# - 使用sql server express为c#.net winform应用程序创建多个用户

sql - "Is Not Null"和 "Not Is Null"有什么区别

sql - 为此使用动态数据透视查询?

sql-server - 将此分层表非规范化为平面表的最快/最简单的方法是什么?

sql-server - SSIS连接管理器不存储SQL密码