使用标识列将值添加到计算列

时间:2018-08-24 17:52:17

标签: sql tsql stored-procedures sql-server-2016

有时我需要将一个临时值存储到一个字段中。我有一个存储过程,使用以下命令将其添加:

Insert new record first then

SELECT @Record_Value = SCOPE_IDENTITY(); 

UPDATE ADMIN_Publication_JSON
SET NonPubID = CAST(@Record_Value as nvarchar(20)) + '_tmp'
WHERE RecID = @Record_Value

它只是获取标识值,并在末尾添加“ _tmp”。有没有一种方法可以在表中创建默认值,如果我没有在该字段中插入值,该值将自动执行该操作?

NonPubID列只是一个NVARCHAR(50)

谢谢

2 个答案:

答案 0 :(得分:1)

在下面查看NewKey颜色:

CREATE TABLE #Table
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
   IDValue VARCHAR(1) ,
   ModifiedDT DATETIME NULL,   
   NewKey AS ( CONVERT(VARCHAR(100),ID)+'_Tmp' )
)

INSERT   #Table( IDValue, ModifiedDT ) 
SELECT   'A', GETDATE()
UNION ALL
SELECT   'Y', GETDATE() - 1
UNION ALL
SELECT   'N', GETDATE() - 5

SELECT * FROM #Table

答案 1 :(得分:1)

您可以编写触发器,将NULL上的字符串替换为INSERT

CREATE TRIGGER admin_publication_json_bi
               ON admin_publication_json
               AFTER INSERT
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE apj
         SET apj.nonpubid = concat(convert(varchar(20), i.id), '_tmp')
         FROM admin_publication_json apj
              INNER JOIN inserted i
                         ON i.id = apj.id
         WHERE i.nonpubid IS NULL;
END;

db<>fiddle

缺点:如果需要,您不能为该列显式插入NULL