【发布时间】:2013-08-14 16:08:18
【问题描述】:
我正在尝试使用 BULK INSERT 将数据从 CSV 文件导入到表中。下面是我的工作存储过程来完成这个:
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[delete_fill]
AS
TRUNCATE TABLE dataImport
BULK
INSERT dataImport
FROM 'c:\fileshare\temp.CSV'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
SELECT * FROM dataImport ORDER BY StoreID, ItemID
RETURN
现在我可能会在 CSV 文件中添加 2 个新列。如何修改我的存储过程以考虑两个新列,同时接受只有三列的文件,使数据库中的两个新列为空。
仅向表 dataImport 添加两列并运行该过程是行不通的。我收到此错误:“消息 4864,级别 16,状态 1,过程 delete_fill,第 7 行 第 2 行第 3 列(价格)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。"
按要求提供dataImport结构和csv数据示例:
Create table dataImport(
StoreID BIGINT not null,
ItemID BIGINT not null,
Price money not null,
TwoforQuantity Int,
TwoforPrice money
)
3 列:
StoreID, ItemID, Price
133,51425,11.79
133,80277,1.49
133,15544,5.28
5 列:
StoreID, ItemID, Price, IntField, MoneyField
133,51425,11.79,2,20.99
133,80277,1.49,2,2.00
133,15544,5.29,3,14.99
【问题讨论】:
-
阅读这个,同样的情况stackoverflow.com/questions/2601941/…
-
对不起,最初应该包含它:Msg 4864, Level 16, State 1, Procedure delete_fill, Line 7 Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2,第 3 列(价格)
-
谢谢,我已经阅读了,但情况并非如此。我的列在文件中不会有所不同。该文件将有 3 列或 5 列。希望有比上述更好的解决方案。
-
我决定执行以下操作:我正在从 VB.Net 应用程序启动存储过程,因此我将在上传到服务器之前检查文件中的列数。然后我将向 SP 添加一个参数,它是文件中的列数(它始终是 3 或 5)。将两张表添加到数据库 - 一张有 3 列,一张有 5 列。根据列参数,我将填充并返回不同的表。如果有人有更优雅的解决方案,请告诉我。 :D
-
你能从你的dataImport的文件和表结构中发布示例数据吗?
标签: sql sql-server sql-server-2000 bulkinsert