Excel SQL Server数据连接
问题描述:
也许有人可以提供一些见解,我有问题。Excel SQL Server数据连接
我有一个SQL Server数据库,它每小时接收一次信息,并使用Bulk Insert从存储过程更新。这一切工作正常,但最终的结果是将这些信息提取到Excel中。
建立数据连接也工作得很好,直到我尝试了一些计算。导入的数据全部格式化为文本。 Excel的数字格式不起作用,所以我决定查看数据库中的表格。
所有的列设置为varchar为大量插入工作,所以我改变了一些数字。在Excel中刷新并进行计算。
重复尝试之后,我一直无法使大容量插入工作,即使使用bcp生成格式文件,它仍然在插入时返回错误。无法将varchar转换为数字,经过一些进一步搜索后,它只会失败,通常是空的一个数字列。
除了使用VBA导入数据并将其转换为此类或将零值添加到每个导入的值以便Excel将其转换。
欢迎任何建议。
谢谢!
答
感谢您在Excel中考虑使用= value()的回复,但想尝试避免附加公式。
我最终能够通过使用bcp实用程序生成大容量插入的格式文件来解决我的问题。虽然让它成为一个文件证明下面足够棘手是我如何生成它的一个例子。
在提升的CMD:
C:\>bcp databasename.dbo.tablename format nul -c -x -f outputformatfile.xml -t, -S localhost\SQLINSTANCE -T
这产生用于特定表的XML格式的文件。由于我的表格有两个额外的列,这些列不在源数据中,所以我编辑了XML并将其删除。他们是uniqueid和getdate列。
然后,我改变BULK INSERT语句所以它使用的格式文件:
BULK INSERT [database].[dbo].[tablename]
FROM 'C:\bulkinsertdata.txt'
WITH (FORMATFILE='C:\outputformatfile.xml',FIRSTROW=3)
使用这种方法,我能够用数字和成功诠释数据类型。当数据连接刷新时回到Excel,它能够确定正确的数据类型。
希望能帮助别人!
列中是否有无效字符,似乎触发了问题?如果是这样,则可以在导入前使用脚本清理数据或导入到临时表中,并在复制到最后一个时清理并转换列。同样,如果您的任务对性能不敏感,则可以基于强制转换创建视图。 – ABS 2012-02-23 18:04:06
当您将以文本形式存储的数据包含在= value()中时 – Jesse 2012-02-24 18:22:02