我可以将列的默认值设置为同一表中同一行上另一列的字符串吗?

时间:2013-05-22 18:34:21

标签: sql sql-server azure default azure-sql-database

这是基表布局:

create table employees (employeeid int not null IDENTITY, 
firstname varchar(50), middlename varchar(50), lastname varchar(50), 
assumedfirstname default(firstname), assumedname as concat(assumedfirstname,' ',lastname)

我知道在上面的语句中没有正确创建assumefirstname列;默认值必须是标量表达式,不能是列名。 那就是说,上述陈述清楚地说明了我的意图。也就是说,我希望假定firstfirstname列自动填充firstname中找到的值,但允许稍后用单独的字符串显式替换。这样,assumename将始终表示该人员的第一个和最后一个的默认值。名称或明确输入的假名和姓氏。

因此,计算列在这种情况下不起作用。

1 个答案:

答案 0 :(得分:2)

您无法将其设置为默认值,但您可以使用触发器进行模拟;

CREATE TABLE employees (
  employeeid INT NOT NULL IDENTITY, 
  firstname VARCHAR(50), 
  middlename VARCHAR(50), 
  lastname VARCHAR(50), 
  assumedfirstname VARCHAR(50), 
  assumedname AS assumedfirstname + ' ' + lastname
);

CREATE TRIGGER MyTrigger on employees
FOR UPDATE, INSERT AS  
UPDATE e 
  SET e.assumedfirstname = COALESCE(e.assumedfirstname, i.firstname)
FROM employees e
JOIN inserted i
  ON i.employeeid=e.employeeid;

如果将oncefirstname设置为null(即未设置),则此触发器会将assumefirstname更新为firstname的值。

An SQLfiddle to test with