Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Копирование значения поля identity  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1193
Всем привет!
Подскажите пожалуйста как при insert скопировать значение поля identity в другое поле?

Как делаю сейчас
create table #tmp(fld1 int identity(1,1),fld2 int,fld3 varchar(10))

insert into #tmp(fld3)
values('hello'),('world')

-- вот от этого апдейта хочу избавиться, какую магию надо применить? :)
update #tmp set
 fld2 = fld1

select *
from #tmp

drop table #tmp


мне нужно чтобы поле fld2 заполнялось при insert такими же значениями как и поле fld2
27 дек 18, 16:53    [21774993]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1193
Забыл версию SQL написать
SQL Server 2012 sp4 enterprise
27 дек 18, 16:54    [21774995]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
Mandarin
Подскажите пожалуйста как при insert скопировать значение поля identity в другое поле?
Никак. Можно разве что скрыть этот update, убрав его в триггер. Или можно сделать вычисляемсое поле, но, наверное, вам нужно обычное.
27 дек 18, 16:59    [21775001]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
aleks222
Member

Откуда:
Сообщений: 920
create table #tmp(fld1 int identity(1,1)
                           --,fld2 int
                           ,fld3 varchar(10))

insert into #tmp(fld3)
values('hello'),('world')

-- вот от этого апдейта хочу избавиться, какую магию надо применить? :)
--update #tmp set
-- fld2 = fld1

select *, fld2 = fld1
from #tmp
27 дек 18, 17:01    [21775006]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1193
Поле должно быть обычным не вычисляемым и оно должно быть. Это боле используется дальше по логике программы.
27 дек 18, 17:06    [21775014]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
_human
Member

Откуда:
Сообщений: 560
Mandarin,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017#a-using-output-into-with-a-simple-insert-statement
27 дек 18, 17:09    [21775019]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
invm
Member

Откуда: Москва
Сообщений: 9273
Mandarin,

sequence вместо identity не предлагать?
27 дек 18, 17:29    [21775043]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
invm
Member

Откуда: Москва
Сообщений: 9273
Хотя, можно вот такое извращение организовать
create table dbo.t (id int identity primary key, v int, id2 int);
go

create trigger dbo.tr_t
on dbo.t
instead of insert
as
begin
 set nocount on;

 exec sys.sp_getapplock @Resource = N'dbo.t__insert', @LockMode = N'Exclusive', @LockOwner = N'Transaction', @LockTimeout = -1;

 set identity_insert dbo.t on;

 declare @ic int = ident_current('dbo.t');

 insert into dbo.t
  (id, v, id2)
  select
   @ic + row_number() over (order by (select 1)),
   i.v,
   @ic + row_number() over (order by (select 1))
  from
   inserted i;
end;
go

insert into dbo.t (v)
values
 (10), (20), (30);

select * from dbo.t;
go

drop table dbo.t;
go
Правда работать будет не всегда Картинка с другого сайта.
27 дек 18, 18:24    [21775115]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
_human
Mandarin,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017#a-using-output-into-with-a-simple-insert-statement
не, ему же нельзя делать апдэйт
27 дек 18, 20:34    [21775242]     Ответить | Цитировать Сообщить модератору
 Re: Копирование значения поля identity  [new]
PizzaPizza
Member

Откуда:
Сообщений: 349
Mandarin,

А можно для общего развития рассказать для чего далее используется это поле fld2 ?
27 дек 18, 20:42    [21775246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить