Перенос данных столбца из одной базы данных в другую - PullRequest
0 голосов
/ 02 сентября 2010

Я пытаюсь перенести данные целого столбца из резервной базы данных в текущую производственную базу данных (ранее в тот день, когда я испортил этот столбец в работе с плохим обновлением).Я использую 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".

Любая помощь будет оценена.

Спасибо!

РЕДАКТИРОВАТЬ:

Благодаря 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

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

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

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

вот как это должно выглядеть ... Я также использовал новый стиль JOIN

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

Сообщение 4104, Уровень 16, Состояние 1, Строка 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 голосов
/ 02 сентября 2010
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
0 голосов
/ 02 сентября 2010

Может быть, вам стоит создать столбец?

введите следующее:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...