sql-server - 如何在不同的服务器中加载数据
问题描述
我正在 SSIS 上设计一个 ETL 项目,我希望它是动态的。我将为许多客户使用这个项目,因此我将针对不同的服务器查询这些提取。
例如,我在带有“执行 SQL 任务”组件的步骤中有这个查询:
INSERT DataWarehouse.schema.fact1
SELECT *
FROM Database.schema.table1
我的数据仓库始终位于 localhost 但“Database.schema.table1”可能位于不同的服务器中,因此我将在客户的服务器中使用不同的链接服务器来检索其数据。
这意味着例如我将需要对 customer1 进行这样的查询更改:
INSERT DataWarehouse.schema.fact1
SELECT *
FROM [192.168.1.100].Database.schema.table1
对于customer2,我需要这样的查询:
INSERT DataWarehouse.schema.fact1
SELECT *
FROM [10.2.5.100].Database.schema.table1
我尝试使用 SSIS 组件进行提取和加载,但由于我的查询复杂,它变得如此混乱。
任何想法如何使我的查询动态?
解决方案
解决问题的一种方法是确保链接服务器的逻辑名称始终相同,而不管实际的物理主机是什么。
所以这里的过程是:
- 使用链接服务器向导创建链接服务器
- 使用它可以将服务器重命名为可在您的代码中使用的一致名称
IE
EXEC master.dbo.sp_serveroption
@server=N'192.168.1.100',
@optname=N'name',
@optvalue=N'ALinkedServer'
现在你可以ALinkedServer
在你的代码中引用
更好的方法是正确编写链接服务器创建脚本 - 不要使用 SSMS 向导
这是模板 - 你需要做更多的研究来资助这里的正确值
USE master;
GO
EXEC sp_addlinkedserver
@server = 'ConsistentServerName',
@srvproduct = 'product name',
@provider = 'provider name',
@datasrc = 'ActualPhysicalServerName',
@location = 'location',
@provstr = 'provider string',
@catalog = 'catalog';
GO
但最后一句话是:不要使用链接服务器。使用 SSIS
推荐阅读
- node.js - 来自另一个环境变量的节点 Heroku 环境变量
- c++ - LNK1169 在 VC2015 C++ 项目中找到一个或多个多重定义的 sysbols
- c# - 呼叫连接或挂断上的 Twilio 获取呼叫详细信息
- python - python元组和枚举
- python - python 正则表达式 re.compile 和 re.search
- python - DRF:相关模型异构列表的序列化器
- c# - 如何通过同时应用 2 个过滤器来执行基于过滤器的搜索?
- jquery - 如何在 URL 末尾应用非重复随机数?
- ios - 如何在 iOS 应用程序中随机打印一个单词?
- javascript - 尝试使用 XMLHttpRequest 上传稍大的文件会导致 POST http://.... 404 (Not Found) 和 http://... 被 CORS 策略阻止