也许有人能为我的一个问题提供一些见解。
我有一个SQL Server数据库,它每小时接收一次信息,并使用Bulk Insert从存储过程中更新。这一切都很好,但是最终的结果是将这些信息放入Excel。
建立数据连接也运行得很好,直到我尝试了一些计算。导入的数据都格式化为文本。Excel的数字格式不起作用,所以我决定查看数据库中的表。
所有列都设置为varchar,以便批量插入工作,因此我将一些列更改为numeric。在Excel中刷新,计算成功。
经过反复的尝试,我仍然不能让批量插入工作,即使用bcp生成一个格式化文件,它仍然在插入时返回错误。无法将varchar转换为numerical,在进一步搜索后,它仅在一个通常为空的numerical列上失败。
而不是使用VBA导入数据并像这样转换数据,或者为每个导入的值添加零,以便Excel对其进行转换。
欢迎提出任何建议。
谢谢!
发布于 2012-03-09 00:55:30
感谢您的回复,我曾考虑在Excel中使用=value(),但希望尽量避免使用额外的公式。
我最终能够通过使用bcp实用程序为批量插入生成格式化文件来解决我的问题。虽然让它生成一个文件被证明足够棘手,但下面是我如何生成它的一个示例。
在提升的cmd中:
C:\>bcp databasename.dbo.tablename format nul -c -x -f outputformatfile.xml -t, -S localhost\SQLINSTANCE -T这为特定表生成了一个xml格式化文件。因为我的表有两个额外的列,而这些列不在源数据中,所以我编辑了XML并删除了它们。它们是唯一and和getdate列。
然后,我更改了Bulk Insert语句,使其使用格式化文件:
BULK INSERT [database].[dbo].[tablename]
FROM 'C:\bulkinsertdata.txt'
WITH (FORMATFILE='C:\outputformatfile.xml',FIRSTROW=3)使用这种方法,我能够成功地使用numeric和int数据类型。回到Excel,当刷新数据连接时,它能够确定正确的数据类型。
希望这对某些人有帮助!
https://stackoverflow.com/questions/9418507
复制相似问题