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

Откуда:
Сообщений: 21
Добрый вечер. Подскажите в чём я не прав.
При выполнении след инструкции более одного раза, выскакивает ошибка -

"В инструкции MERGE предпринята попытка выполнить операцию UPDATE или DELETE для одной и той же строки более одного раза. Это происходит в тех случаях, когда одна целевая строка соответствует нескольким исходным. Инструкция MERGE не может выполнять UPDATE и DELETE для одной и той же строки целевой таблицы более одного раза. Уточните предложение ON таким образом, чтобы обеспечить соответствие целевой строки только одной исходной строке, либо объедините исходные строки при помощи предложения GROUP BY."

set language russian
GO
Merge dbo.Vendor AS target 
USING (Select *  From dbo.Vendor_Insert
	   UNION ALL 
	   Select *  From dbo.Vendor_Delete
	   UNION ALL
	   Select *  From dbo.Vendor_Update
	  )	 AS source
ON target.VendorKey = source.VendorKey
WHEN MATCHED AND NOT (
						source.VendorID = ISNULL(target.VendorID, '')
						AND source.VendorName = ISNULL(target.VendorName, '')
						AND source.CreditRating = ISNULL(target.CreditRating, '')
						AND source.IsActive = ISNULL(target.IsActive, '')
						AND source.SalesManager = ISNULL(target.SalesManager, '')
						AND source.ProductCount = ISNULL(target.ProductCount, '')
					)
THEN UPDATE 
		SET target.VendorID = source.VendorID
	,	    target.VendorName = source.VendorName
	,	    target.CreditRating = source.CreditRating
	,	    target.IsActive = source.IsActive
	,	    target.SalesManager = source.SalesManager
	,		target.ProductCount = source.ProductCount

WHEN NOT MATCHED BY target
THEN INSERT (VendorID, VendorName, CreditRating, IsActive, SalesManager, ProductCount)
VALUES		(source.VendorID, source.VendorName, source.CreditRating, source.IsActive, source.SalesManager, source.ProductCount)
OUTPUT $action, inserted.*;
23 сен 14, 18:54    [16612275]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при Merge  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
GarTer,

у вас VendorKey повторяются. либо в dbo.Vendor, либо в запросе source.
в merge так нельзя.
23 сен 14, 19:06    [16612314]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при Merge  [new]
GarTer
Member

Откуда:
Сообщений: 21
А как это сиправить?
23 сен 14, 19:12    [16612336]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при Merge  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
GarTer
А как это сиправить?


дубли у вас, скорее всего, именно в source-запросе:
Select *  From dbo.Vendor_Insert
	   UNION ALL 
	   Select *  From dbo.Vendor_Delete
	   UNION ALL
	   Select *  From dbo.Vendor_Update

перестройте его так, чтоб возвращались уникальные VendorKey.

ну, это конечно гадание на хрустальном шаре. ваших данных я не вижу.
23 сен 14, 19:18    [16612361]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при Merge  [new]
GarTer
Member

Откуда:
Сообщений: 21
Подойдёт ли вместто UNION INTERSECT?
23 сен 14, 19:28    [16612399]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить