C# 将整个记录BCP到sql server表中的一个字段
我正在使用bulkcopy将(大型)文本文件插入SQL server。直到现在,我总是用这样的桌子 创建表mijndabase.dbo.invoer ( veld varchar(最大值) ) 然后我使用下面的DOS批处理文件 C:\pad\bestand.txt-C-T-S AC01\ST01中的bcp mijndabase.dbo.invore 或者用C# 如果我想将文件批量复制到多字段表中的一个字段,而不拆分输入文件,比如说我有一个表,我该怎么办 创建表mijndabase.dbo.invoter2 ( nr int标识(1,1), veld1 varchar(最大值), veld2 varchar(1000), veld3 varchar(1000) ) 输入文件应批量复制到veld1,不应使用其他字段 该怎么办?是否有额外的参数可供使用 非常感谢您的帮助 问候,C# 将整个记录BCP到sql server表中的一个字段,c#,sql-server,bcp,C#,Sql Server,Bcp,我正在使用bulkcopy将(大型)文本文件插入SQL server。直到现在,我总是用这样的桌子 创建表mijndabase.dbo.invoer ( veld varchar(最大值) ) 然后我使用下面的DOS批处理文件 C:\pad\bestand.txt-C-T-S AC01\ST01中的bcp mijndabase.dbo.invore 或者用C# 如果我想将文件批量复制到多字段表中的一个字段,而不拆分输入文件,比如说我有一个表,我该怎么办 创建表mijndabase.dbo.inv
John使用格式文件跳过不需要的字段。下面是BCP命令的MSDN链接 确保字段具有默认值。标识本身很好,只需为所有其他字段定义 以下是我在BCP/BULK INSERT上写的一些文章 如果你还有问题,就喊一声 我需要一些示例数据和精确的表定义(TSQL)来提供更精确的细节 [--来自用户的包含更多信息的电子邮件--] 我使用下表将数据导入到
CREATE TABLE [dbo].[t_000_invoerbcp_01]
(
[volgnr_01] [int] IDENTITY(1,1) NOT NULL,
[veld_1_01] [varchar](max) NULL,
[veld_2_01] [varchar](1000) NULL,
[veld_3_01] [varchar](1000) NULL,
[veld_4_01] [varchar](1000) NULL,
[veld_5_01] [varchar](1000) NULL
)
狡猾的DBA修改了用户提供的以下格式文件
10.0
6
1 SQLCHAR 0 0 "\t" 0 volgnr_01 ""
2 SQLCHAR 0 0 "\t" 2 veld_1_01 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 0 "\t" 0 veld_2_01 ""
4 SQLCHAR 0 0 "\t" 0 veld_3_01 ""
5 SQLCHAR 0 0 "\t" 0 veld_4_01 ""
6 SQLCHAR 0 0 "\r\n" 0 veld_5_01 ""
varchar(MAX)的定义与长度为0的定义相同。见msdn文章
若要跳过字段,请将数据长度和列顺序设置为空。见msdn文章
同样,如果您不想要空值,那么定义默认值是必要的
我希望这个修改后的格式文件适合您。这不是SqlBulkCopy,而是BCP。它们是完全不同的东西(一个是客户端API调用,另一个是服务器命令行实用程序),恰好在非常不同的上下文中用于非常相似的目的。我不理解你发表的评论。f允许您使用格式化文件。这是跳过字段的关键。抱歉,此条目有误
10.0
6
1 SQLCHAR 0 0 "\t" 0 volgnr_01 ""
2 SQLCHAR 0 0 "\t" 2 veld_1_01 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 0 "\t" 0 veld_2_01 ""
4 SQLCHAR 0 0 "\t" 0 veld_3_01 ""
5 SQLCHAR 0 0 "\t" 0 veld_4_01 ""
6 SQLCHAR 0 0 "\r\n" 0 veld_5_01 ""