Есть ли способ автоматически скопировать столбец int с автоматически увеличивающимся тождеством в другой столбец? - PullRequest
0 голосов
/ 30 октября 2019

Есть ли способ автоматически скопировать столбец int с автоматически увеличенной идентификацией в другой столбец?

create table dbo.CopyOfIdColumn
(
myIdCol int identity(1,1)
,copyOfMyIdCol int Default (I WANT THE DEFAULT TO BE WHATEVER THE VALUE OF myIdCol IS)
)

Я знаю, что могу обернуть хранимую процедуру и просто обновить запись на основе вставленной записи, используя что-то из Лучший способ получить идентичность вставленной строки? post, вероятно SCOPE_IDENTITY(), но я надеюсь на более простой / легкий способ.

Заранее спасибо.

ОБНОВЛЕНИЕ: предложение Панагиотиса Канавоса, обновив вопрос, чтобы лучше указать, чего я хочу достичь.

То, что я хочу сделать, это иметь столбец, в котором указывается родитель для строки (часто сам). Я бы предпочел, чтобы столбец не имел нулевых значений.
Мне также не нужна дополнительная таблица. Родители и дети имеют одинаковые данные, и я не хочу иметь таблицу только с parentIds. Он предлагает мне добиться этого с ограничением по умолчанию.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

используйте вычисляемые поля, как показано ниже:

create table #temp
(
myIdCol int identity(1,1),
othercolumn varchar(20),
copyOfMyIdCol as myIdCol 
)

--TESTING
insert into #temp (othercolumn)
values('a'),('b')


select * from #temp
0 голосов
/ 30 октября 2019

Вы можете создать последовательность и затем использовать ее во вставленной строке, например:

CREATE SEQUENCE Schema.Sequence
    AS int  
    INCREMENT BY 1 ;

И ваша вставка будет выглядеть так:

DECLARE @NextID int ;  
SET @NextID = NEXT VALUE FOR Schema.Sequence;  
-- Some work happens  
INSERT Test.Orders (OrderID, ColumnWithID, Name, Qty)  
    VALUES (@NextID, @NextID, 'Rim', 2) ;  
GO 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...