基于年度的主键?

时间:2010-07-15 14:31:53

标签: sql-server database database-design

如何在SQL Server 2005/2008中使用以下格式创建主键:  CurrentYear + auto-increment

示例:当前年份是2010年,在新表中,ID应从1开始,因此:20101,20102,20103,20104,20105 ......依此类推。

4 个答案:

答案 0 :(得分:9)

cleaner solution是创建一个由composite primary key组成的{{3}}。 YearCounter列。

答案 1 :(得分:3)

通过这样做不确定你想要完成什么,但是用两个字段做这个更有意义。

如果由于某种原因两者的组合必须是PK,那么只需跨越两列。然而,似乎没有必要,因为身份部分将是独一无二的年份。

答案 2 :(得分:2)

这在技术上满足您的要求:

CREATE TABLE #test
        ( seeded_column INT IDENTITY(1,1) NOT NULL
        , year_column INT NOT NULL DEFAULT(YEAR(GETDATE()))
        , calculated_column AS CONVERT(BIGINT, CONVERT(CHAR(4), year_column, 120) + CONVERT(VARCHAR(MAX), seeded_column)) PERSISTED PRIMARY KEY
        , test VARCHAR(MAX) NOT NULL);

INSERT INTO #test (test)
SELECT 'Badda'
UNION ALL
SELECT 'Cadda'
UNION ALL
SELECT 'Dadda'
UNION ALL
SELECT 'Fadda'
UNION ALL
SELECT 'Gadda'
UNION ALL
SELECT 'Hadda'
UNION ALL
SELECT 'Jadda'
UNION ALL
SELECT 'Kadda'
UNION ALL
SELECT 'Ladda'
UNION ALL
SELECT 'Madda'
UNION ALL
SELECT 'Nadda'
UNION ALL
SELECT 'Padda';

SELECT *
FROM #test;

DROP TABLE #test;

答案 3 :(得分:0)

你必须为此写一个触发器:)

有一个单独的表来存储最后使用的数字(我真的不知道SQL Server中是否有与Oracle中的序列类似的东西)。

OR

您可以获取最后插入的项目并提取其最后一个数字。

THEN

您可以从SELECT DATEPART(yyyy,GetDate());

获取当前年份

触发器将是ON INSERT触发器,您可以在其中组合年份和最后一位数字并更新列