Как вставить значение в таблицу и сразу использовать identy в соседней колонке?

Всем хорошего дня!
Как можно вставляя строку в таблицу одновременно получить id записи для использования его в соседней колонке?
Например,
CREATE TABLE [dbo].[Product]([Id] [int] IDENTITY(1,1) NOT NULL,[Name] [nvarchar](50) NOT NULL)
insert into dbo.Product (Name) values ('Новый продукт_')

при этом select этой записи должен вернуть "Новый продукт_123" - где 123 есть id записи.
Важно, что не через сцепление или как то еще, а именно в поле Name должно прилепляться id в конце названия.

Мне удалось собрать такое решение:
insert into dbo.Product (Name) values ('Новый продукт_' + cast(IDENT_CURRENT('dbo.Product') as varchar(5)))

Получается именно то, что нужно, но есть проблема - если одновременно вставлять записи, то IDENT_CURRENT вернет именно последний id, а не текущий для данной строки.
Как получить текущий?

P.S. Понимаю что можно взять из inserted и после обновить, или другими путями, которые влекут за собой последующий update, но ищу именно решение в рамках одного insert.
  • Вопрос задан
  • 31 просмотр
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
CREATE TABLE [dbo].[Product](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NOT NULL,
	[NamePower]  AS (([Name]+'_')+CONVERT([varchar],[ID])),
 CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


в поле Name должно прилепляться id в конце названия
Нарушение нормальной формы.

могут ли в этом случае быть решения?
С помощью вычисляемого поля вы может привести всё к одному виду используя оператор CASE.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы