使用 sql server 从数据库中选择值到另一个
Posted
技术标签:
【中文标题】使用 sql server 从数据库中选择值到另一个【英文标题】:select values from database to another with sql server 【发布时间】:2019-03-07 10:37:55 【问题描述】:您好,我必须将一个 IP 地址上的数据库中的一个选择传递给另一个(相同的)位于完全不同 IP 上的数据库,下面的查询如何传递以进行切换?
Sql 代码:
/*Insert into database with same name into same table addres:: 172.16.50.98*/
Insert into
/* select from database address: 172.16.50.96*/
SELECT IdUtente,Longitudine,Latitudine,Stato,DataCreazione
FROM Quote.dbo.Marcatura
where DataCreazione>'2019-01-08 18:37:28.773'
【问题讨论】:
我会通过 SSIS 做到这一点 是这样,但它是如何完成的? 或者您可以使用OPENQUERY
、OPENROWSET
或链接服务器。
使用 SSIS 或链接服务器
如果这是一次性活动,您可以从源导出到 csv 并从 csv 导入到目标。
【参考方案1】:
Linked Server/OpenQuery 是实现这一目标的方法。看看这个。
including parameters in OPENQUERY
【讨论】:
【参考方案2】:如果要导入的数据不大并且这不会是一个重复的任务,那么链接服务器可能是更好的选择。如果您以前没有这样做,Creating one through the SSMS GUI 会更容易,但下面是通过 T-SQL 使用 SP_ADDLINKEDSERVER
存储过程创建一个的示例。如果您的帐户无权访问其他服务器,则需要使用 SP_ADDLINKEDSRVLOGIN
存储过程为链接服务器配置一个对源服务器以及数据库和任何引用对象具有适当权限的帐户。虽然使用链接服务器语法(4 部分名称)更简单且更易于阅读,但如果只使用一个链接服务器,我强烈建议使用 OPENQUERY
进行插入。这将在源服务器上执行 SQL,在那里应用任何过滤器并仅返回必要的行,而链接服务器语法将在执行过滤之前返回所有行。您可以阅读更多关于这两个here 之间的差异。您指出两台服务器上的数据库名称相同,并且假定表和模式名称也相同。如果它们不同,请确保相应地更新它们。
如果要导入大量数据,或者这将是创建 SSIS 包并将其设置为作为 SQL 代理作业运行的常规过程,将是更好的方法。如果您选择走这条路,有很多事情需要考虑,但下面的链接将帮助您入门。 SQL Server Data Tools (SSDT) 是可以开发包的地方。虽然没有必要,但从 SSIS 目录 SSISDB 执行包将比仅使用文件系统更有益。可以使用 OLE DB 或 SQL Server 目标,因为要加载到的表位于 SQL Server 上,但是 SQL Server 目标只能用于本地数据库。
链接服务器:
--Create linked server
--SQL product name and SQLNCLI11 provider for SQL Server
EXEC [MASTER].DBO.SP_ADDLINKEDSERVER @server = N'MyLinkedServer', @srvproduct=N'SQL',
@provider=N'SQLNCLI11', @datasrc=N'ServerIPAddress'
--OPENQUERY insert
INSERT INTO Quote.dbo.Marcatura (IdUtente, Longitudine, Latitudine, Stato, DataCreazione)
SELECT
IdUtente,
Longitudine,
Latitudine,
Stato,
DataCreazione
FROM OPENQUERY(MyLinkedServer, '
SELECT
IdUtente,
Longitudine,
Latitudine,
Stato,
DataCreazione
FROM Quote.dbo.Marcatura')
SSIS:
SSIS SSDT SSISDB Execute SQL Task Data Flow Task OLE DB Source OLE DB Destination SQL Server Destination SQL Server Agent SSIS Packages【讨论】:
【参考方案3】:SSIS 解决方案
我认为这需要一个非常简单的SSIS包来实现:
-
创建两个
OLEDB Connection manager
;每台服务器一个
添加数据流任务
在Data flow task
addan OLEDB Source
和OLEDB destination
内
在OLEDB source
(172.16.50.98
连接管理器) 选择SQL command
为Access mode
并使用以下命令:
SELECT IdUtente,Longitudine,Latitudine,Stato,DataCreazione
FROM Quote.dbo.Marcatura
where DataCreazione >'2019-01-08 18:37:28.773'
将源列映射到OLEDB destination
(172.16.50.96
连接管理器)
有用的链接
Extract Data by Using the OLE DB Source SSIS OLEDB Source to OLE DB Destination example【讨论】:
以上是关于使用 sql server 从数据库中选择值到另一个的主要内容,如果未能解决你的问题,请参考以下文章
sql server如何如何从一个表中提取部分资讯插入到另一表中
从 sql server 获取选定的值到 php 中的下拉列表