0

ベーステーブルのレイアウトは次のとおりです。

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)

上記のステートメントでは、想定されたfirstname列が正しく作成されていないことを理解しています。デフォルト値はスカラー式でなければならず、列名にすることはできません。とはいえ、上記のステートメントは私の意図を明確に示しています。つまり、想定されたfirstname列にfirstnameで見つかった値が自動的に入力されるようにしたいのですが、後で別の文字列に明示的に置き換えることができます。このように、assumename は常に、個人の姓と名のデフォルト、または明示的に入力された想定名と姓のいずれかを表します。

そのため、この状況では計算列は機能しません。

4

1 に答える 1

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;

null に設定されている場合 (つまり、設定されていない場合)、このトリガーは、想定されたfirstname を firstname の値に更新します。

でテストする SQLfiddle

于 2013-05-22T18:55:22.783 に答える