@artshelom

Как использовать merge into?

Пытаюсь сделать запрос merge into, мне кажется у меня старая версия бд:

MERGE INTO [dbo].[CinemaUsers] t
  USING (SELECT * FROM OPENJSON('[{"ID":1,"UserName":"Администратор","LoweredUserName":"администратор","DisplayName":"","Inn":"","PinCode":"","Enabled":true,"Deleted":false,"Guid":"f052b53f-d6ec-45c5-8734-0e0dd7b0d2f1","serverId":null}]')
  with ([ID] int, [UserName] nvarchar, [Enabled] bit, [Deleted] bit, [Guid] uniqueidentifier, [LoweredUserName] nvarchar, [DisplayName] nvarchar, [Inn] nvarchar, [PinCode] nvarchar, [CardCode] bigint, [ExternalId] int, [serverId] int)) 
  j ON (t.[ID] = j.[serverId])
  WHEN MATCHED THEN update set t.[UserName] = j.[UserName], t.[Enabled] = j.[Enabled], t.[Deleted] = j.[Deleted], t.[Guid] = j.[Guid], t.[LoweredUserName] = j.[LoweredUserName], t.[DisplayName] = j.[DisplayName], t.[Inn] = j.[Inn], t.[PinCode] = j.[PinCode], t.[CardCode] = j.[CardCode], t.[ExternalId] = j.[ExternalId] 
  WHEN NOT MATCHED THEN INSERT ([UserName], [Enabled], [Deleted], [Guid], [LoweredUserName], [DisplayName], [Inn], [PinCode], [CardCode], [ExternalId]) values (j.[UserName], j.[Enabled], j.[Deleted], j.[Guid], j.[LoweredUserName], j.[DisplayName], j.[Inn], j.[PinCode], j.[CardCode], j.[ExternalId]) 
  output $action, inserted.ID, j.[ID];

Получаю ошибку:

Неправильный синтаксис около ключевого слова "with". Если эта инструкция является обобщенным табличным выражением, предложением xmlnamespaces или предложением в контексте отслеживания изменений, предыдущую инструкцию необходимо завершить точкой с запятой.


Вроде как таблицу надо обновить до 1003, но я не помню как или тут что-то другое?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
unfilled
@unfilled
Какая у вас версия SQL Server? OPENJSON появился в 2016, ЕМНИП.
Если отдельно подзапрос с OPENJSON выполняется, я бы вынес его в cte, а в USING указал имя cte.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы