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