我使用批量复制将(大)文本文件插入SQL服务器。到现在为止我总是使用像这样的表
创建表mijndatabase.dbo.invoer ( veld varchar(max) ) 然后我使用以下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 identity(1,1), veld1 varchar(max), veld2 varchar(1000), veld3 varchar(1000) )
并且应将输入文件批量复制到veld1,不应使用其他字段。
怎么做,是否有额外的参数可供使用?
非常感谢任何帮助。
此致
约翰
答案 0 :(得分:0)
使用格式文件跳过不需要的字段。以下是BDN命令的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
)
Crafty 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值,则必须定义默认值。
我希望这个修改后的格式文件适合您。