Использование столбца идентификаторов для добавления значения в вычисляемый столбец - PullRequest
0 голосов
/ 24 августа 2018

Иногда мне нужно сохранить временное значение в поле.У меня есть хранимая процедура, которая добавляет его с помощью:

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 голосов
/ 25 августа 2018

Вы можете написать триггер, который заменяет 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 s для этого столбца, если это необходимо.

0 голосов
/ 24 августа 2018

Проверьте столбик 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
...