我已对下表进行了编码,并且我想使用将在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}}
答案 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以获取更多信息。