将数据库表从一个 SQL Server 数据库表更新到另一个?

问题描述 投票:0回答:4

我正在尝试将数据库字段从一个 SQL Server 表更新到另一个表。

我们的生产 SQL Server 是

[spdbprod.test.com\spprod]
,我们的 QA 服务器是
[spdbQA.test.com\spQA]

我需要从 QA 表更新生产中的表。我使用这个 SQL 语句,但是它给出了一个错误。

UPDATE 
    [spdbprod.test.com\spprod].[aspnetdb].[dbo].[Communities_Groups] as t1
SET 
    t1.Show = (Select t2.show from [spdbQA.test.com\spQA].[aspnetdb].[dbo].
[Communities_Groups] as t2 where t1.GroupID = t2.GroupdID)

我在这里缺少什么? 错误: 更新。 (“关键字‘as’附近的语法不正确。”)

sql-server sql-server-2005 tsql
4个回答
32
投票

您以错误的方式使用表别名。你不能做

UPDATE table1 t SET field1=val
,你必须写
UPDATE table1 SET field=val
(或
UPDATE table1 SET field=val FROM table1 t
)。因此,将您的查询更改为

UPDATE [spdbprod.test.com\spprod].[aspnetdb].[dbo].[Communities_Groups]   
SET Show = t2.show
FROM [spdbprod.test.com\spprod].[aspnetdb].[dbo].[Communities_Groups] t1
INNER JOIN [spdbQA.test.com\spQA].[aspnetdb].[dbo].
[Communities_Groups] t2 ON (t1.GroupID = t2.GroupID)

7
投票

我知道这个问题已经得到解答,但这对我有用。

  • 在服务器对象 | 添加链接服务器链接服务器: 微软文档

  • 命名链接服务器

    [SERVER-NAME or <some ipaddress>, <some-port>]

    例如

    [10.0.0.200,2345]
    - 我使用端口 2345,但标准 MS SQL 端口是 1433

示例:

  • 我们有一张
    [Customers]
    桌子
  • 我们想要更新
    [CustomerAddress]
    CustomerId = 123
  • 字段
  • 我们想使用来自名为
    [backupServer]
  • 的服务器的备份数据
  • [backupServer]
    是我们执行SQL的机器

这是 SQL 代码:

UPDATE production
SET
    CustomerAddress = backupServer.CustomerAddress
FROM 
    [10.0.0.200,2345].[ProductionDatabase].[dbo].[Customers] production
INNER JOIN 
    [BackupDatabase].[dbo].[Customers] backupServer
        ON 
            production.CustomerId = backupServer.CustomerId
WHERE 
    backupServer.CustomerId = 123

通用格式:

UPDATE production
SET
    columnName = backupServer.columnName
FROM 
    [SERVER-NAME or IP,PORT].[ProductionDatabase].[dbo].[tableName] production
INNER JOIN 
    [BackupDatabase].[dbo].[tableName] backupServer
        ON 
            production.SomeId = backupServer.SomeId
WHERE 
    backupServer.SomeId = <id>

对于那些想要将所有数据从一台服务器的表复制(插入)到另一台服务器的人,可以使用如下命令来完成:

SELECT * INTO TargetTable 
FROM 
[SERVER-NAME or IP, PORT].[SourceDatabase].[dbo].[SourceTable]

这将使用

TargetTable
SourceTable
处的
SourceDatabase
处的数据创建一个名为
SERVER-NAME or IP, PORT
的新表。


2
投票

我相信你必须有一个数据库链接(链接服务器)才能工作。

我在工作中无法访问两个 SQL 服务器,因此无法对其进行测试,但我确信您需要该链接。

您有链接服务器设置吗?

这是一个可能有帮助的网址 http://msdn.microsoft.com/en-us/library/ms188279.aspx


1
投票
  1. 您需要在服务器对象下添加链接服务器
  2. 您可以使用“CHOOSEN-NAME”或“CHOOSEN-NAME”来命名该链接服务器 [IP地址,端口号]

如何使用 tsql 添加链接服务器,请查看此链接:如何查找链接服务器

出于示例目的,假设我已命名链接服务器 "DESTINATION_SERVER" ,数据库名称为“DESTINATION_DB”,表 名称是“DESTINATION_TBL”。那么从您的源服务器您的查询可能如下所示:

UPDATE t1  
SET t1.updatecolumn = t2.updatecolumn
FROM [DESTINATION_SERVER].[DESTINATION_DB].[dbo].[DESTINATION_TBL] t1
INNER JOIN [SOURCE-SERVER].[SOURCE_DB].[dbo].
[SOURCE_TBL] t2 ON (t1.matcingcolumn = t2.matchingcolumn)
© www.soinside.com 2019 - 2024. All rights reserved.