【问题标题】:How to update linked table column from local SQL Server table如何从本地 SQL Server 表更新链接表列
【发布时间】:2015-06-26 18:03:55
【问题描述】:

我有一个本地 SQL Server 表和一个远程链接的 MySQL 表。

我需要从本地表中提取电子邮件地址来更新远程。

此 T-SQL 语句适用于单个更新:

UPDATE openquery(SKYCOMLINK2, 'select tng_id, tng_account, tng_email from user_list where tng_account = 12345 and tng_status = ''A''') 
SET tng_email = 'blah@blah.com';

我想要做的是,对于状态为“A”的每条RemoteTable 记录,我想从本地 SQL Server 表中提取一个电子邮件地址(单个记录的示例):

select email 
from LocalTable 
where id = 12345

所以用英语:对于RemoteTable 中的每条活动记录(可能是多个),在LocalTable 中查找相同帐号的对应记录(每个帐号一条记录)并从中提取电子邮件地址以填充RemoteTable 中的匹配记录。如果它更容易,LocalTable 可以是下面的驱动程序(准SQL-英语):

update RemoteTable 
set RemoteTable.email = LocalTable.email 
where RemoteTable.accountNum = LocalTable.accountNum 
  and LocalTable.status = 'a' 
  and RemoteTable.status = 'a'

我该怎么做?提前致谢。

【问题讨论】:

  • 通过加入 4 个部分名称进行更新
  • 我已经看过 4 部分的名称,但无法弄清楚第四部分是什么。我得到了 SKYCOMLINK2.tng.user_list ... 这是链接 server.database.table 但第四个是什么?
  • 它是所有者,默认是 dbo
  • dbo 的顺序在哪里?
  • 我在 SSMS 中右键单击表格并选择创建选择它会显示给你。

标签: sql-server tsql updates linked-server


【解决方案1】:

如果 MySQL 没有四个部分名称并且 SQL Server 不会接受没有一个的引用,您可以尝试 serverName.databaseName..tableName。将架构名称留空意味着默认架构。但是,根据this question,这可能不适用于所有版本的 SQL Server、MySQL 和 ODBC 驱动程序。

这是另一个提供多种解决问题方法的问题:Do I have to use OpenQuery to query a MySQL Linked Server from SQL Server?

【讨论】:

  • 您的“其他人找到了解决方案”链接无效
  • 我很抱歉 - 你是对的。但是,搜索它会出现另一个 Stack Overflow 问题,该问题既有 OpenQuery 语法,也有使用四部分名称中的默认标识符的另一种语法(linkedServer...yourTable)。你可以在stackoverflow.com/questions/8187234/…找到它。
  • 这也是我问的一个问题,也没有答案。
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2017-05-20
  • 2014-11-30
相关资源
最近更新 更多