Вставить значение столбца в зависимости от столбца автоинкремента

У меня есть таблица в моей базе данных SQL Server со следующими столбцами

ID | NAME | DOB | APPLICATION NO | 1 | JOHN | 31/05/1986 | KPL\2014\1 | 2 | MARY | 26/04/1965 | KPL\2014\2 | 3 | VARUN | 15/03/1972 | KPL\2014\3 | 

Здесь ID столбца – это столбец автоматического увеличения и столбец. APPLICATION NO зависит от ID .

Это означает, что APPLICATION NO является конкатенацией значений KPL\ , YEAR и столбца ID .

Тогда как я могу сделать запрос на вставку?

Почему вы не используете вычисляемый столбец?

Я бы изменил определение таблицы.

добавить столбец «год»

добавьте столбец «имя_программы» (если это не всегда «KPL»).

затем создайте свой вычисленный столбец с необходимыми полями

 alter table <yourTable> add computed_application_name as (application_name + '/' + CAST(<yearColumn> as VARCHAR(4) + '/' + <otherColumn> + CAST(id as VARCHAR(MAX)) 

Просто используйте вычисленный столбец:

 alter table t add application_no as ('KPL' + cast(year(getdate()) as varchar(255)) + cast(id as varchar(255)); 

Мне кажется, что вы действительно хотите год, когда была вставлена ​​строка. Для этой цели я бы рекомендовал добавить столбец createdat а затем использовать это вместо getdate() :

 alter table t add CreatedAt datetime default getdate(); 

Если у вас есть данные в таблице, установите значение (это не нужно, если таблица пуста):

 update table t set CreatedAt = getdate(); 

Затем определите application_no :

 alter table t add application_no as ('KPL' + cast(year(CreatedAt) as varchar(255)) + cast(id as varchar(255)); 

Просто используйте вычисленный столбец для «APPLICATION_NO»:

 create table tbl ( ID int, NAME varchar(10), DOB date, APPLICATION_NO as ('KPL\'+cast(year(dob) as char(4))+'\'+cast(id as varchar)) ) 

Вы также можете продолжать и индексировать его.

Вы можете создать триггер для запуска после вставки. В вашей вкладке игнорируйте application_no. И ваш триггер обновит этот столбец на основе идентификатора.

Что-то вроде этого:

 CREATE TRIGGER [TRIGGER_TABLE1] ON TABLE1 AFTER INSERT AS BEGIN UPDATE TABLE1 SET APPLICATION_NO = 'KPL\' + CONVERT(VARCHAR, YEAR(GETDATE())) + '\' + CONVERT(VARCHAR, ID) WHERE APPLICATION_NO IS NULL END 

EDIT: таким образом, вы также сможете использовать другие значения столбцов. APPLICATION_NO просто нужно принимать значения NULL. Таким образом, вы управляете таким образом, что будет обновляться или нет.

Используйте SCOPE_IDENTITY, чтобы получить введенный идентификатор записи

 Declare @Id INT Insert Into TABLENAME(NAME ,DOB ) Values('Name','1/1/1990') Set @Id=SCOPE_IDENTITY() IF(@Id>0) begin declare @col varchar(100)='' set @col= 'KPL\' + CONVERT(varchar(4),YEAR(GETDATE()))+'\' + CONVERT(varchar(4),@Id) Update TABLENAME SET APPLICATIONNO= @col Where ID = @id end 

Если вы действительно хотите сделать это самостоятельно с помощью инструкции insert:

  • предполагая, что вы хотите вставлять данные из другой таблицы
  • и TABLE1 – таблица, которую вы описали в своем вопросе, а TABLE2 – таблица, в которую вы хотите импортировать данные:

     DECLARE @MAXID INT SELECT @MAXID = MAX(ID) FROM TABLE1 INSERT INTO TABLE1 (NAME,DOB,APPLICATION_NO) SELECT NAME, DOB, 'KPL\' + CONVERT(CHAR(4),YEAR(GETDATE()) +'\' + CONVERT(VARCHAR(25), @MAXID + ROW_NUMBER() OVER (ORDER BY NAME)) AS APPLICATION_NO FROM TABLE2 
Interesting Posts

Обновите существующую запись и вставьте только новую запись Datagridview, используя 2 процедуры хранения

SQL Server Query – групповое умножение

WebMatrix Database.Query с пользовательским CommandTimeout

REPLACE и Unicode в SQL

Как я могу сортировать на основе следующего поля записи в SQL Server?

Проверка изменений SQL Server 2005

Как удалить из нескольких таблиц с помощью INNER JOIN на SQL-сервере

sp_send_dbmail вставить файл mhtml в тело

Как проверить значения в столбце в Select select

Как я могу упорядочить по дате в строчном формате?

Обновить таблицу со случайными полями

Извлечь первое появление элемента в столбце A на основе столбца B с использованием SQL

выберите 2 таблицы с одинаковым столбцом без соединения

Удаление нескольких повторяющихся строк в таблице

Не удалось подключиться к localDB в VS2012 – «При установлении соединения с SQL Server произошла связанная с сетью или специфичная для экземпляра ошибка …»

Давайте будем гением компьютера.