Заявление о слиянии и вставка идентификатора - PullRequest
3 голосов
/ 09 марта 2012

Я использую оператор Merge для вставки / обновления данных в моей хранимой процедуре.

MERGE [dbo].[tReserveData_4541] AS Target
USING (SELECT * FROM  [dbo].[tblcangrowhitesh]) AS Source
ON ( [Source].[PK_ID] =  [Target].[PK_ID])

WHEN MATCHED THEN
    UPDATE SET [Target].[mgender] = Source.[mgender]

WHEN NOT MATCHED BY TARGET THEN
    INSERT ([Granularity], [PK_ID], [ROWID], 
            [mgender], [mma1], [mma2], [mma3], 
            [mmadmincost], [mmcumulativevolume], 
            [mmcurrency], [mmdate],
            [mmfileimporteddate], [mmfilename])
    VALUES ([Source].[Granularity], [Source].[PK_ID], [Source].[ROWID],
            [Source].[mgender], [Source].[mma1], [Source].[mma2], [Source].[mma3], 
            [Source].[mmadmincost], [Source].[mmcumulativevolume],
            [Source].[mmcurrency], [Source].[mmdate],
            [Source].[mmfileimporteddate], [Source].[mmfilename])

Как вы видите, я собираюсь вставить столбец идентификаторов, т.е. [PK_ID] в оператор MERGE. Но я не могу этого сделать.

Ответы [ 2 ]

9 голосов
/ 10 марта 2012

Я не очень знаком с командой MERGE, но, поскольку вы вставляете данные непосредственно в столбец идентификаторов, вам не придется использовать команду IDENTITY_INSERT? например,

SET IDENTITY_INSERT [dbo].[tReserveData_4541] on

MERGE...

SET IDENTITY_INSERT [dbo].[tReserveData_4541] off
0 голосов
/ 10 марта 2012

Удалите свойство IDENTITY для PK_ID, если вам не нужно генерировать значения для цели.

Для этого вы можете добавить столбец PK_ID_temp UPDATE [dbo].[tReserveData_4541] SET PK_ID_temp = PK_ID.Удалите столбец PK_ID, затем переименуйте PK_ID_temp обратно в PK_ID.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...