2010-09-01 2 views
0

Я пытаюсь передать данные из целого столбца из базы данных резервного копирования в текущую производственную базу данных (ранее в тот же день, когда я испортил этот столбец с плохим обновлением). Я использую MS SQL Server 2005.Перенос данных столбца из одной базы данных в другую

В этом примере я пытаюсь восстановить 'Column1' из DB2.Table1 в DB1.Table1:

begin transaction 

update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = [DB2].[dbo].[Table1].[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

commit transaction 

Для меня этот запрос возвращает:

Идентификатор многочастности «DB2.dbo.Table1.Column1» не может быть .

Любая помощь будет принята с благодарностью.

Спасибо!

EDIT:

Благодаря SQL Menace я получил это работает запрос. Благодаря! Ниже фиксированного запрос

begin transaction 

update db1Alias 
set db1Alias.[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

commit transaction 

Проблема заключалась в том, что я не использовал свой собственный объявленный псевдоним в моем обновлении и установить заявление. Я не знал, что вы должны использовать псевдоним ', прежде чем они даже будут объявлены.

+0

SQL не идет сверху bottom..for пример ОТ запускается до SELECT ... – SQLMenace

ответ

3

Предполагая, что column1 реального имени столбца, то проблема может быть, что вы использовали псевдоним в избранном, но не в обновлении

вот что он должен выглядеть ... Я также использовал новый стиль РЕГИСТРИРУЙТЕСЬ

update db1Alias 
set db1Alias.[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias 
JOIN [DB2].[dbo].[Table1] db2Alias ON db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

Вот пример, который вы можете запустить

первый запуск этого, чтобы создать эти 2 таблицы

use tempdb 
go 

create table BlaTest(id int) 
insert BlaTest values(1) 
go 

create table BlaTest2(id int) 
insert BlaTest2 values(1) 
go 

Теперь, когда вы пытаетесь сделать это

update tempdb.dbo.BlaTest 
set tempdb.dbo.BlaTest.id =tempdb.dbo.BlaTest2.id 
from tempdb.dbo.BlaTest b 
join tempdb.dbo.BlaTest2 a on b.id =a.id 

Msg 4104, Level 16, State 1, Line 2
Мульти-часть идентификатора "tempdb.dbo.BlaTest2.id" не может быть связано.

Но если вы используете псевдоним ... нет проблем

update b 
set b.id =a.id 
from tempdb.dbo.BlaTest b 
join tempdb.dbo.BlaTest2 a on b.id =a.id 
+0

Я определяю псевдоним в инструкции from, поэтому я не думаю, что это проблема. – phil

+1

да, но вы не используете псевдоним в обновлении – SQLMenace

+0

Обновлен с примером, который вы можете запустить, чтобы вы могли увидеть, где проблема – SQLMenace

0

Возможно, вам необходимо создать столбец?

введите следующую команду:

select * from information_schema.columns 
where table_name = 'Table1' 

вы видите столбец с именем column1?

+0

также может быть из-за псевдонима – SQLMenace

+0

столбец существует – phil

+0

Столбец существует, это очень распространенная ошибка во время обновления. – Kashif

0
update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

Чем лучше будет

update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias INNER JOIN [DB2].[dbo].[Table1] db2Alias 
ON db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 
Смежные вопросы