Как уточнить идентификатор из нескольких частей при обновлении столбца из одной базы данных в другую?

#sql #sql-server

Вопрос:

Database2 происходит ошибка

идентификатор из нескольких частей не может быть привязан

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

Моя цель состоит в том, чтобы заменить столбец данных из базы данных 2 в базу данных 1, которая находится между определенным периодом времени.

Вот пример того, что я делаю:

 UPDATE Table1
SET Database1.dbo.Table1.Value1 = Database2.dbo.Table1.Value1
FROM Database1.dbo.Table1
INNER JOIN Database2.dbo.Table1.Value1 ON (Database1.dbo.Table1.Value1 = Database2.dbo.Table1.Value1)
WHERE  Database1.dbo.Table1.Value1.Date_Time BETWEEN '2002-12-09 14:00:00.000' AND '2013-06-20 14:00:00.000';
 

Комментарии:

1. может быть, это глупый вопрос, но вы проверили, что оба столбца находятся в обеих таблицах? Кроме того, псевдонимы ваших объектов сделают это более читаемым

2. INNER JOIN Database2.dbo.Table1.Value1 вы соединяете объекты, а не столбцы. Так .Value1 что, конечно, ему там не место. Также согласитесь с Дугом, псевдонимы-ваш друг. Вам потребуется любая полная ссылка только один раз.

3. Можете ли вы уточнить, что вы подразумеваете под сглаживанием? Извините, я немного новичок в SQL. И я убедился, что оба столбца находятся в обеих таблицах =)

4. Есть еще where Database1.dbo.Table1.Value1.Date_Time кое-что . Так вот оно что.. database.schema.object.column... date_time?? Что это date_time ? SQL подумает, что ты имеешь в виду linkedServer.Database.Schema.object.column .

5. Краткое руководство по сглаживанию

Ответ №1:

Это просто проблема синтаксиса. Псевдоним обеих таблиц.

 UPDATE d1_table
SET d1_table.Value1 = d2_table.Value1
FROM Database1.dbo.Table1 d1_table
INNER JOIN Database2.dbo.Table1 d2_table
ON d1_table.Value1 = d2_table.Value1)
WHERE  d1_table.Value1 BETWEEN '2002-12-09 14:00:00.000' AND '2013-06-20 14:00:00.000';
 

Ответ №2:

Вам нужно соединить таблицы и столбцы с таблицами

 UPDATE t1
    SET 
       t1.Value1 = t2.Value1
        FROM Database1.dbo.Table1 t1
        INNER JOIN (SELECT Value1 FROM Database2.dbo.Table1) t2
        ON ( t1.Value1 = t2.Value1)
        WHERE  t1.Date_Time BETWEEN '2002-12-09 14:00:00.000' AND '2013-06-20 14:00:00.000';