Повторно вставьте первичный ключ в ту же запись - PullRequest
1 голос
/ 09 апреля 2019

Мне нужно вставить записи в рабочую таблицу.Проблема состоит в том, что одно из полей должно иметь то же значение, что и первичный ключ.

В приведенном ниже примере запрос вставки сбрасывает '99' в [AlwaysMyID].Но это просто заполнитель.Это должно быть любое значение, входящее в [MyID].

Как мне написать запрос на вставку, чтобы система добавила одно и то же значение PK в и [MyID] и [ТакжеMyID]?

Drop table #mylittletable

Create table #Mylittletable (
[MyID] int IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[AlsoMyID] int,
[ActualData] varchar(1))

Select * from #Mylittletable

Insert into #Mylittletable values (99,'x')

Select * from #Mylittletable

Если вы интересуетесь фоном, разработчик использует AlwaysMyID в качестве поля связывания, поэтому любое количество записей можно связать вместе, используя исходное значение первичного ключа.Тем не менее, я не могу контролировать структуру таблицы.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

С помощью этого триггера в таблицу вы можете вставить в столбец alsoMyID что угодно, и это будет перезаписано значением get, установленным в столбце myID.

create trigger tr_Mylittletable ON Mylittletable
AFTER INSERT AS
BEGIN
    declare @ID int = (select MyID from inserted)
    update Mylittletable set AlsoMyID = @ID where MyID = @ID
END

ПРИМЕЧАНИЕ. Это работает только при вставках по одной строке за раз!

0 голосов
/ 09 апреля 2019

Во-первых, вы не можете указать значение для столбца идентификации, если не используете set identity_insert.так что в соответствии с вашим требованием, вам нужно вставить то же значение в AlwaysMyID, что и MyID.

Вы можете использовать его как текущий:

insert into Mylittletable
select @@IDENTITY+1,'1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...