【问题标题】:BCP entire record to one field in sql server tableBCP整个记录到sql server表中的一个字段
【发布时间】:2013-12-03 03:08:30
【问题描述】:

我正在使用批量复制将(大)文本文件插入 SQL 服务器。直到现在我一直使用这样的表

创建表 mijndatabase.dbo.invoer ( veld varchar(最大值) ) 然后我使用下面的DOS批处理文件

bcp mijndatabase.dbo.invoer 在 C:\pad\bestand.txt -c -T -S AC01\ST01

或者在 C# 中

            string command = @"bcp mijndatabase.dbo.invoer in C:\pad\bestand.txt -c -T -S AC01\ST01"

            ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;

            using (Process proc = new Process())
            {
                proc.StartInfo = procStartInfo;
                proc.Start();
                proc.WaitForExit();

            }

当我想将文件批量复制到多字段表中的字段而不拆分输入文件时我应该怎么做所以说我有一个表

创建表 mijndatabase.dbo.invoer2 ( nr int 身份(1,1), veld1 varchar(最大值), veld2 varchar(1000), veld3 varchar(1000) )

并且输入文件应该被批量复制到veld1,其他字段不应该被使用。

怎么办,是否/有额外的参数可以使用?

非常感谢任何帮助。

问候,

约翰

【问题讨论】:

  • 这是 NOT SqlBulkCopy,它是 BCP。它们是完全不同的东西(一个是客户端 API 调用,另一个是服务器命令行实用程序)恰好在非常不同的上下文中服务于非常相似的目的。

标签: c# sql-server bcp


【解决方案1】:

使用格式文件跳过不需要的字段。以下是 BCP 命令的 MSDN 链接。

http://msdn.microsoft.com/en-us/library/ms162802.aspx

确保字段具有默认值。身份本身就可以,只需为所有其他字段定义即可。

这是我在 BCP / BULK INSERT 上写的一些文章。

http://craftydba.com/?tag=export

如果您仍有疑问,请大声喊叫。

我需要一些示例数据和准确的表定义 (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 文章。

http://technet.microsoft.com/en-us/library/ms177478.aspx

要跳过字段,请将数据长度和列顺序设为空白。请参阅 msdn 文章。

http://technet.microsoft.com/en-us/library/ms179250.aspx

同样,如果您不想要 NULL 值,则需要定义默认值。

我希望这个修改后的格式文件对你有用。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2023-03-20
相关资源
最近更新 更多