使用表字段作为标识符的一部分

时间:2015-08-16 22:50:37

标签: sql-server

我已对下表进行了编码,并且我想使用将在YearID中输入的文字添加到'YEAR'中的前缀CAST()

例如,如果有人将year 2命名为YearID,则'YEAR2'字段将填充为YEAR。目前,它只会在YEAR55之后的序列中应用下一个数字,例如CREATE TABLE Year( GroupID INT IDENTITY (10000, 1) NOT NULL, YearID VARCHAR (10) NOT NULL DEFAULT 'YEAR' + CAST(NEXT VALUE FOR non_identity_incrementer AS VARCHAR(10)), Year NVARCHAR (50) NOT NULL, DateTimeModified DATETIME NOT NULL DEFAULT SYSDATETIME(), Status NVARCHAR(50) NOT NULL, PRIMARY KEY CLUSTERED (GroupID) ); 等。

{{1}}

2 个答案:

答案 0 :(得分:0)

您可以使用触发器执行此操作,如下所示:

DELIMITER //

CREATE TRIGGER year_after_insert
AFTER INSERT
   ON Year FOR EACH ROW

BEGIN

set NEW.YearID = concat('YEAR', NEW.Year);

END; //

DELIMITER ;

它将在插入年份后运行,根据YearID设置Year

答案 1 :(得分:0)

计算列可能是解决方案:

CREATE TABLE [Year] (
    GroupID             INT IDENTITY (10000, 1)  NOT NULL,
    YearID              AS 'YEAR' + [Year],
    [Year]              NVARCHAR (50) NOT NULL,
    DateTimeModified    DATETIME NOT NULL DEFAULT SYSDATETIME(),
    Status              NVARCHAR(50) NOT NULL,
    PRIMARY KEY CLUSTERED (GroupID) 
);

当您INSERT行时,YearID将等于'Year' + [Year]

INSERT INTO [Year]([Year], Status) VALUES ('2', 'Complete')
SELECT * FROM [Year]

结果:

GroupID     YearID     Year      DateTimeModified        Status
----------- ---------- --------- ----------------------- ------------
10000       YEAR2      2         2015-08-17 07:02:49.837 Complete

请注意,每次在查询中使用计算列时都会重新计算,除非您将其设为PERSISTED。使计算列PERSISTED表示它实际存储在表中。请阅读here以获取更多信息。