这是基表布局:
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将始终表示该人员的第一个和最后一个的默认值。名称或明确输入的假名和姓氏。
因此,计算列在这种情况下不起作用。
答案 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的值。