Имитация SQL -Слияние со вставкой и обновлением - PullRequest
0 голосов
/ 02 августа 2020

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

Мой код слияния

MERGE INTO [RemoteIp].[dbname].[dbo].[MTest] AS [Target]
USING (SELECT * FROM [dbo].[Products]
) AS [Source] ([ProductID],[ProductName],[Rate])
 ON ([Target].[PID] = [Source].[ProductID])
  WHEN MATCHED AND (
    NULLIF([Source].[ProductID], [Target].[PID]) IS NOT NULL OR NULLIF([Target].[PID], [Source].[ProductID]) IS NOT NULL OR 
    NULLIF([Source].[ProductName], [Target].[ProductName]) IS NOT NULL OR NULLIF([Target].[ProductName], [Source].[ProductName]) IS NOT NULL OR 
    NULLIF([Source].[Rate], [Target].[Rate]) IS NOT NULL OR NULLIF([Target].[Rate], [Source].[Rate]) IS NOT NULL) THEN
 UPDATE SET
  [Target].[PID] = [Source].[ProductID], 
  [Target].[ProductName] = [Source].[ProductName], 
  [Target].[Rate] = [Source].[Rate]
WHEN NOT MATCHED BY TARGET THEN
 INSERT([PID],[ProductName],[Rate]) 
 VALUES([Source].[ProductID],[Source].[ProductName],[Source].[Rate]);

Я пробую это для вставки и обновления

IF EXISTS(SELECT * FROM [RemoteIP].[DBName].[db].[Mtest])
BEGIN
    --update existing row
UPDATE
    [RemoteIP].[DBName].[db].[Mtest]
SET
    [RemoteIP].[DBName].[db].[Mtest].pid = products.ProductID,
    [RemoteIP].[DBName].[db].[Mtest].ProductName = products.ProductName,
    [RemoteIP].[DBName].[db].[Mtest].Rate = products.Rate
FROM
    Mtest tr INNER JOIN products sr
        ON tr.pid = sr.ProductID
END
ELSE
BEGIN
    --insert new row
    INSERT INTO [RemoteIP].[DBName].[db].[Mtest] (pid, ProductName, Rate)
    VALUES ([products].[ProductID], [products].[ProductName], [products].[Rate])

Я получаю эту ошибку при выполнении запроса в

The multi-part identifier …… could not be bound in line 4

1 Ответ

0 голосов
/ 02 августа 2020

Следующим шагом является проверка синтаксиса команды UPDATE. После того как вы присвоили [RemoteIP].[DBName].[db].[Mtest] псевдоним tr, в области действия команды больше не будет [RemoteIP]..... Есть только tr. Попробуйте это:

UPDATE
    tr
SET
    pid         = sr.ProductID,
    ProductName = sr.ProductName,
    Rate        = sr.Rate
FROM
    [RemoteIP].[DBName].[db].[Mtest] tr INNER JOIN products sr
        ON tr.pid = sr.ProductID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...