我需要以可以导入到数据库的格式提供数据;但是,我没有Windows或对Server实例的访问权限。
数据目前在几个CSV电子表格中。我查看了BULK INSERT,但发现他们对CSV的支持非常有限,比如不识别双引号(文档:指定字段和行终止符 )。我已经读过一些边缘情况,比如字段碰巧包含引号(因此需要转义)不受支持。
是否有一种更可靠的中间格式可以从Linux/OSX生成?例如,MySQL转储、Excel、Sqlite等等?
我还需要这个导入过程来创建表,而不需要编码。进口的人是非技术人员。这将是一个一次性的过程。
我将无法测试导入,因为我无法直接访问Server数据库,因此我正在寻找一种更可靠的方法。例如,MySQL转储、XLS、XML等。
发布于 2016-09-29 16:47:48
考虑另一种选择:OPENROWSET/SELECT INTO
作为一名DBA,我有时觉得BULK INSERT真的很烦人。使用这段代码,我完全绕过了BULK INSERT/BCP,使用了OPENROWSET和"Microsoft“引擎,后者实际上就是"Office”引擎。当然,我导入了Excel文件,但是CSV非常类似。
在这段代码中,我将文件SQLServerUsageTracker-10-21-2015-11h47m19s.xlsx直接导入到SQLSunSet.dbo.TempServerMap表中--列是由" into“自动生成的。尝试此方法,更改代码以满足您的需要,并查看它是否解决了您正在经历的引用问题。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[spImportMapSQLServers]
@MapsExcelFile_SQLServerUsageTracker varchar(1000)='C:\Users\solu3m\Documents\MAP\SQL10162015\SQLServerUsageTracker-10-21-2015-11h47m19s.xlsx'
as
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)您需要在正在完成工作的Server上安装MSAccess/Office引擎。
https://www.microsoft.com/en-us/download/details.aspx?id=13255
如果您决定这样做,您可以使用Windows、SQL Server Developer Edition的评估副本以及在OS上托管Windows的Virtual之类的东西来测试所有这些。这样,您就不必在生产系统上进行任何开发/测试。
别担心,(包括所有特性)现在是免费的:
https://www.microsoft.com/en-us/cloud-platform/sql-server-editions-developers
您可能还需要安装Windows的评估版:
https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012
如果您需要在Linux、OS或Solaris上虚拟化eval环境,您可以在VirtualBox或其他虚拟化软件上构建Windows的VM:
https://dba.stackexchange.com/questions/150635
复制相似问题