通过中介(客户端服务器)从离线 PC 连接到 Azure SQL 数据库

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

我有一个桌面应用程序在本地网络上的几台 PC 上运行,该应用程序连接到服务器上安装的 Microsoft SQL Server 数据库。

该服务器已连接到互联网,而 PC 未连接到互联网。

我的问题是,我想将数据库迁移到 Azure SQL 数据库,但由于我的电脑无法直接访问互联网,并且无法选择 VPN,有没有办法让我的服务器正常工作作为本地 PC (LAN) 上运行的应用程序和在线 Azure 数据库之间的中介(客户端-服务器)?

谢谢

sql-server azure azure-sql-database
1个回答
0
投票

实际上有一个解决方案...首先,将 Azure SQL DB 服务器链接到本地服务器,sp_addlinkedserver 或遵循本指南:如何创建从 SQL Server 到 Azure SQL 数据库的链接服务器

服务器链接建立后,您可以使用 4 部分名称系统来查询链接服务器中的表:

Server.Database.Schema.Table

示例

SELECT sensors.*
     , instance.CurrentValue
     , history.EntryTime as Hist_EntryTime
     , history.Value as Hist_Value
FROM Sensor sensors -- local table to the executing database
INNER JOIN RealTimeDataServer.RTDatabase.dbo.SensorInstance instance 
        ON instance.SensorId = sensors.Id
INNER JOIN LakeStorage.HistoryData.dbo.Readings history
        ON history.SensorId = sensors.Id

如果您的目的是在不对源代码进行任何更改的情况下迁移数据,因此不重写任何查询,那么您可能会对 CREATE EXTERNAL TABLE

感兴趣

外部表复制特定表的架构(但不复制任何数据),因此使用此表和空数据库,您可以有效地提供对外部数据库的远程访问。

  • 我说数据库是因为您必须在同一模式中具有唯一的表名称,但这对于具有现有表的数据库也同样有效。

如果我为上面的示例创建

SensorInstance
Readings
外部表,则查询如下所示:

SELECT sensors.*
     , instance.CurrentValue
     , history.EntryTime as Hist_EntryTime
     , history.Value as Hist_Value
FROM Sensor sensors
INNER JOIN SensorInstance instance ON instance.SensorId = sensors.Id
INNER JOIN history ON history.SensorId = sensors.Id

您还可以在服务器上托管一个 API,为您执行 SQL 调用。然而,这需要修改您的应用程序并设计 API。如果你这样做,


如果您的 PC 可以访问服务器,并且服务器可以访问互联网,那么 VPN 是一个可行的解决方案,您使用服务器作为网关,并且应该能够通过该网关建立 VPN 隧道...

© www.soinside.com 2019 - 2024. All rights reserved.