如何使用where子句从备份数据库更新实时数据库

时间:2015-04-23 12:21:04

标签: sql sql-server

我有一个Live数据库,我想从备份数据库中的列中获取特定信息。

这是我当前的查询:

USE master;
GO
EXEC sp_addlinkedserver 
   N'10.0.1.1',
   N'SQL Server';
GO

sp_addlinkedsrvlogin @rmtsrvname ='10.0.1.1'
, @useself = 'FALSE' --specify false when using remote login and password
, @locallogin = null -- not used because we are not mapping remote and local login
, @rmtuser ='Login'
, @rmtpassword = 'Password'

Use livedatabase
GO

SELECT col1, col2, col3, col4, col5
INTO #temptable
FROM [10.0.1.1].BackupDatabase.dbo.Table

UPDATE
   Table
SET
   Table.col1 = PP.col1, 
   Table.col2 = PP.col2,
   Table.col3 = PP.col3,
   Table.col4 = PP.col4


FROM
    Table CU

INNER JOIN
    #temptable PP
ON 

    TA.col5 = PP.col5

Drop Table #Temptable

USE master;
GO
sp_dropserver '10.0.1.1', 'droplogins';

我无法弄清楚的是,我如何根据" Where Clause"更新实时数据库?例如,我正在寻求更新:

Where ta.col6 = 'This is a teset'

我试过这个:

UPDATE
   Table
SET
   Table.col1 = PP.col1, 
   Table.col2 = PP.col2,
   Table.col3 = PP.col3,
   Table.col4 = PP.col4


FROM
    Table CU

INNER JOIN
    #temptable PP
ON 

    TA.col5 = PP.col5

where ta.col6 = 'This is a test'

这将更新表中的所有行,然后单独更新已过滤的行。

我知道我需要更新"更新,设置"部分并转动"从"进入一个选择语句。但我无法弄清楚如何让它发挥作用。

1 个答案:

答案 0 :(得分:1)

使用update

中的表格别名
UPDATE CU
    SET col1 = PP.col1, 
        col2 = PP.col2,
        col3 = PP.col3,
        col4 = PP.col4
    FROM Table CU INNER JOIN
         #temptable PP
         ON cu.col5 = PP.col5
    WHERE cu.col6 = 'This is a test';

当你说UPDATE TABLE . . .时,它最终成为该表的另一个副本。就个人而言,我希望SQL Server在发生这种情况时会发出错误(或至少是警告)。也就是说,如果UPDATE具有FROM子句,则UPDATE表应该是FROM中定义的有效别名。