noj*_*lag 5 sql-server ssis sql-server-2014 data-validation ssis-2014
我有我想导入 SQL Server 2014 的 CSV 文件。文件中的每条记录大约有 20 列,每条记录都应验证数据类型合规性以及每列的其他一些检查(最小/最大范围,空/not null 等)。
我正在寻找有关以有效方式执行此操作的模型架构的建议。使用 SSIS 和一些错误表在我看来有点低效,因为它看起来好像我一次只能检查一列和错误处理(尤其是 SSIS 中的列锁定充其量是笨拙的)。
我希望处理每条记录并立即了解该记录中的所有错误,以便我可以立即向提供导入数据的人员提供所有问题的反馈。
事实上,在导入数据时,SSIS 确实很笨拙,因为它似乎具有其所吹捧的所有处理能力。我相信其中一位评论者 Kin 创建临时表的做法是正确的。下面是我们用来将数据直接从 Excel 导入到临时表中以进行合规性分析的代码。正如您在下面的示例中看到的,OPENROWSET 使用 T-SQL 读取 Excel 电子表格上名为“SQL Server 实例详细信息”的特定选项卡,并将数据导入到 SQL 表 TempServerMap 中。
之后,数据被导入到临时表中,您有很多选择。您可以将数据插入到另一个表中,该表在每个列上都有您需要的所有 SQL 业务规则——剔除不合格的数据——我说这并不是必然的“最佳方法”,而是为了使用在开始时使用最少的代码来微调查找错误的过程。您需要在此处控制错误处理以捕获坏苹果(行),以便您稍后可以查看它们。或者,您可以创建函数、过程、触发器或所有上述内容来提前检查数据,以确保符合业务要求。
如果您希望将这些错误传达给其他人,只需创建一个 SSRS(报告服务)报告来查询您的新错误表,并授予他们查看报告的适当权限。它基于 Web,可以在 Intranet 环境中轻松访问。如果您有外部同事,您可以让 SSRS 通过电子邮件将报告同样轻松地发送给他们。
这里的要点是:将数据从 Excel 转移到 SQL Server 中,以便可以有效地对其进行操作。
某些 DBA 可能会对下面代码的替换/执行感到恼火。如果是这种情况,只需使用特定的 Excel 文件名对 select 语句进行硬编码即可。
declare @cmdstring varchar(8000) ='select * into SQLSunSet.dbo.TempServerMap from OPENROWSET (''Microsoft.Ace.OLEDB.12.0'', ''Excel 12.0;Database=<MapsExcelFile_SQLServerUsageTracker>'', ''select * from [SQL Server Instance Details$]'')'
set @cmdstring = replace(@cmdstring,'<MapsExcelFile_SQLServerUsageTracker>',@MapsExcelFile_SQLServerUsageTracker)
if exists (select * from sysobjects where type ='u' and name ='TempServerMap') drop table TempServerMap
--print (@cmdstring)
exec (@cmdstring)
Run Code Online (Sandbox Code Playgroud)
许多人似乎转向 SSIS,希望不再编写 T-SQL 代码。但我通常发现 SSIS 就像有缺陷的四轮驱动。它只会让你陷入困境,而不是在路上走得更远。
PS 要有效地使用 OPENROWSET,您可能需要安装 Microsoft Access Database Engine 2010 Redistributable(实际上是 Microsoft Office 引擎,而不仅仅是 MS Access)。可以在这里下载:
https://www.microsoft.com/en-us/download/details.aspx?id=13255
此外,您可能需要配置 SQL Server 以运行 OPENROWSET,并在安装后使用以下代码在 T-SQL 中使用 Office 引擎:
exec sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15284 次 |
最近记录: |