创建表时的SQL Server设置默认值

时间:2019-01-21 15:46:47

标签: sql sql-server

我是SQL的新手,在学习了MySQL之后,现在让SQL Server可以使用。

我正在创建一个新表,在该表中,我希望每次将值插入其他列时都会自动更新ploy_id列。

我写了以下内容,并将其添加到SSMS中的“默认值或绑定”中:

CONCAT(334600,IF no_id>=10 SELECT no_id 
ELSE CONCAT(0,no_id),substring(last_name, 1, 1),substring(first_name, 1, 1))

想法是id_no列将自动具有基于IDENTITY(1,1)的值,我可以使用该数字以及first_name和last_name的首字母来自动生成唯一的雇主编号。

结果应为:

id_no | first_name | last_name | employer_id

1     | John       | Hamilton  | 33460001HJ

但是这不起作用! 它一直在说:

  

消息8152,级别16,状态13,服务器[pc_name] \ SQLEXPRESS,第1行   字符串或二进制数据将被截断。该声明已经   终止。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

我认为您不需要默认值。仅当您在该列中插入空值时才使用这些值,而不是在更新后使用。如果您希望每次在另一列中进行更改时都更新一列,则需要一个计算列。另请参见https://docs.microsoft.com/en-us/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017

alter table myTable
add myComputedColumn AS CONCAT(
    334600,
    right('0' + cast(no_id as varchar), 2),    -- this is a better way to add leading zeros
    substring(last_name, 1, 1),
    substring(first_name, 1, 1)
);

如果希望将数据物理存储在表中,则可以使用持久化的计算列。