我有一个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'
这将更新表中的所有行,然后单独更新已过滤的行。
我知道我需要更新"更新,设置"部分并转动"从"进入一个选择语句。但我无法弄清楚如何让它发挥作用。
答案 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
中定义的有效别名。