CREATE TABLE mytable (
first TINYINT NOT NULL CHECK(first BETWEEN 0 AND 99),
second INT NOT NULL CHECK (second BETWEEN 0 AND 999),
third INT NOT NULL,
CONSTRAINT pk_mytable_123 PRIMARY KEY (first, second, third)
)
GO
CREATE VIEW v_mytable AS
SELECT 'a' + RIGHT('00' + CAST(first AS VARCHAR), 2) AS first,
RIGHT('0000' + CAST(second AS VARCHAR), 4) AS second,
third
FROM mytable
GO
INSERT
INTO mytable
VALUES (1, 1, 2008)
GO
SELECT *
FROM v_mytable
GO
first second third
---- ---- ----
a01 0001 2008
这个主键只能容纳INT
值,所有格式将在视图中进行。
注意,才达到最好的结果在性能方面,你更好地创造,而不是视图计算列,并创建一个额外的UNIQUE
指数在这些列:
CREATE TABLE mytable (
_first TINYINT NOT NULL CHECK(_first BETWEEN 0 AND 99),
_second INT NOT NULL CHECK (_second BETWEEN 0 AND 999),
third INT NOT NULL,
first AS 'a' + RIGHT('00' + CAST(_first AS VARCHAR), 2),
second AS RIGHT('0000' + CAST(_second AS VARCHAR), 4)
CONSTRAINT pk_mytable_123 PRIMARY KEY (_first, _second, third)
)
CREATE UNIQUE INDEX ux_mytable_123 ON mytable (first, second, third)
第二个应该是3个字符长(001而不是0001)并且可能将组合添加到视图中,这似乎是他正在寻找的?又名“a01-001-2008” – Andomar 2009-05-08 11:14:02
似乎他想加入这些价值观从外部世界得到的东西。在这种情况下,最好有3列。连接比分析更容易。 – Quassnoi 2009-05-08 11:15:45
当测试第二个表时,我收到错误,唯一性拼写错误,然后它抱怨语法错误,然后它说“表'mytable2'中的计算列'第二'不允许在另一个计算列定义中使用。 “ – Tarks 2009-05-08 11:24:23