#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
.
Ответ №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';