У мене є дві бази даних з однаковими таблицями, але різними даними. Я хочу взяти всі дані з таблиці у другій базі даних та оновити існуючі значення в першій.
Якщо такого запису немає, я хочу вставити новий. Ось мій код (який не працює):
UPDATE tbl1
SET tbl1.Field1 = tbl2.Field1
FROM [test1].[dbo].[Table1] tbl1, [test2].[dbo].[Table1] tbl2
WHERE tbl1.Id = tbl2.Id
IF @@ROWCOUNT = 0
INSERT INTO tbl1 (tbl1.Id, tbl1.Field1)
VALUES ([test2].[dbo].[Table1].Id, [test2].[dbo].[Table1].Field1)
У мене є такі повідомлення про помилки.
Повідомлення 4104, рівень 16, стан 1, рядок 9
Багатокомпонентний ідентифікатор "test2.dbo.Table1.Id
"неможливо пов'язати.Повідомлення 4104, рівень 16, стан 1, рядок 9
Багатокомпонентний ідентифікатор "test2.dbo.Table1.Field1
"неможливо пов'язати.
Я думаю, що проблема полягає у неправильному використанні псевдонімів, але я не можу зрозуміти, що саме я роблю неправильно.
Відповіді:
5 за відповідь № 1Ви можете використовувати a MERGE
заява для цього:
Merge [test1].[dbo].[Table1] As Target
Using [test2].[dbo].[Table1] As Source On Target.Id = Source.Id
When Matched Then Update
Set Field1 = Source.Field1
When Not Matched Then Insert
(Id, Field1)
Values (Source.Id, Source.Field1);
1 для відповіді № 2
Проблема в тому, що ви використовуєте
INSERT INTO tbl1 (tbl1.Id, tbl1.Field1)
VALUES ([test2].[dbo].[Table1].Id, [test2].[dbo].[Table1].Field1)
у цьому твердженні можна використовувати лише константи або змінні.
Але вам, мабуть, потрібно використовувати так
INSERT INTO [test2].[dbo].[Table1] (Id, Field1)
SELECT tbl2.Id, tbl2.Field1 FROM [test1].[dbo].[Table1] tbl1
WHERE NOT EXISTS(
SELECT * FROM [test2].[dbo].[Table1] tbl2 WHERE tbl2.ID=tbl1.ID
)