您可以使用多种approuches做到这一点:
计算列
CREATE TABLE t3
(
ID INT IDENTITY(1,1),
ApprovalID INT,
Approval AS (CASE
WHEN ApprovalID = 1 THEN 'Hatchery'
WHEN ApprovalID = 2 THEN 'Purchase'
WHEN ApprovalID = 3 THEN 'Rearing'
WHEN ApprovalID = 4 THEN 'Source Unknown'
WHEN ApprovalID = 5 THEN 'Not Approved'
ELSE '<Unknown approval state>'
END
) PERSISTED
)
INSERT INTO t3(ApprovalID) VALUES(1)
INSERT INTO t3(ApprovalID) VALUES(2)
INSERT INTO t3(ApprovalID) VALUES(3)
INSERT INTO t3(ApprovalID) VALUES(4)
INSERT INTO t3(ApprovalID) VALUES(5)
UPDATE t3
set ApprovalID = 2
where ApprovalID = 1
SELECT * FROM t3
触发器
DROP TABLE t3
CREATE TABLE t3
(
ID INT IDENTITY(1,1),
ApprovalID INT,
Name NVARCHAR(256),
)
GO
CREATE TRIGGER t3_trigger
ON t3
AFTER INSERT, UPDATE
AS
UPDATE t3
SET Name = CASE
WHEN i.ApprovalID = 1 THEN 'Hatchery'
WHEN i.ApprovalID = 2 THEN 'Purchase'
WHEN i.ApprovalID = 3 THEN 'Rearing'
WHEN i.ApprovalID = 4 THEN 'Source Unknown'
WHEN i.ApprovalID = 5 THEN 'Not Approved'
ELSE '<Unknown approval state>'
END
FROM t3 INNER JOIN inserted i ON t3.ID = i.ID
GO
INSERT INTO t3(ApprovalID) VALUES(1)
INSERT INTO t3(ApprovalID) VALUES(2)
INSERT INTO t3(ApprovalID) VALUES(3)
INSERT INTO t3(ApprovalID) VALUES(4)
INSERT INTO t3(ApprovalID) VALUES(5)
UPDATE t3 set ApprovalID = 2 WHERE ApprovalID = 1
SELECT t3.*, Approval.Name FROM t3 LEFT JOIN Approval ON t3.ApprovalID = Approval.ApprovalID
但最好的方法是分割数据在两个表
CREATE TABLE t3
(
ID INT IDENTITY(1,1),
ApprovalID INT,
)
CREATE TABLE Approval
(
ApprovalID INT,
Name NVARCHAR(256)
)
INSERT INTO Approval(ApprovalID, Name) VALUES(1, 'Hatchery')
INSERT INTO Approval(ApprovalID, Name) VALUES(2 , 'Purchase')
INSERT INTO Approval(ApprovalID, Name) VALUES(3, 'Rearing')
INSERT INTO Approval(ApprovalID, Name) VALUES(4, 'Source Unknown')
INSERT INTO Approval(ApprovalID, Name) VALUES(5, 'Not Approved')
INSERT INTO t3(ApprovalID) VALUES(1)
INSERT INTO t3(ApprovalID) VALUES(2)
INSERT INTO t3(ApprovalID) VALUES(3)
INSERT INTO t3(ApprovalID) VALUES(4)
INSERT INTO t3(ApprovalID) VALUES(5)
并使用选择数据查询象下面这样:
SELECT t3.*, Approval.Name FROM t3 LEFT JOIN Approval ON t3.ApprovalID = Approval.ApprovalID
你真的应该有一个存储ApprovalIDs和他们的名字一个表,然后针对它 – Lamak
执行'JOIN'你会以错误的方式去做。您应该将'approval'列提取到另一个具有两列的静态表,即'approval_id'和'approval',并且在想要显示“批准”字符串时对原始表使用'join'。这个过程被称为[规范化](http://en.wikipedia.org/wiki/Database_normalization)。 – Mureinik
计算列在这里是正确的选择,因为“批准”是“ApprovalID”的直接翻译。您可以创建UDF来转换值并将该udf用作列“批准”定义。 –