Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ID为主键的SQL Server中的BCP移位值_Sql Server_Bcp - Fatal编程技术网

Sql server ID为主键的SQL Server中的BCP移位值

Sql server ID为主键的SQL Server中的BCP移位值,sql-server,bcp,Sql Server,Bcp,我正在使用bcp将.csv文件导入SQL Server中的表,如下所示: bcp test1 in "./file.csv" -S server_name -U login_id -P password -d database_name -c -t 我收到以下信息/警告: BCP数据文件中遇到意外的EOF。 bcp复制失败 file.csv数据: A, B, C A, B, C A, B, C A, B, C 我的桌子: CREATE TABLE test2 ( a VARCHAR(

我正在使用
bcp
.csv
文件导入SQL Server中的表,如下所示:

bcp test1 in "./file.csv" -S server_name -U login_id -P password -d database_name -c -t
我收到以下信息/警告:

BCP数据文件中遇到意外的EOF。
bcp复制失败

file.csv
数据:

A, B, C
A, B, C
A, B, C
A, B, C
我的桌子:

CREATE TABLE test2
(
    a VARCHAR(8) PRIMARY KEY,
    b VARCHAR(8),
    c VARCHAR(8)
);

CREATE TABLE test1 
(
    ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    a VARCHAR(8),
    b VARCHAR(8),
    c VARCHAR(8)

    FOREIGN KEY (a) REFERENCES test2(a)
);
下面是我从test1中选择的
SELECT*

ID | a | b |   c   |
1    B   CA B    C
A    B   CA B    C
以下是我的预期:

ID|a |b |c
1  A  B  C
2  A  B  C
3  A  B  C
3  A  B  C
我对
test2
没有任何问题,它几乎类似于
test
,但没有
ID
。因此,
csv
文件格式良好。那我为什么要这样换班呢

编辑1

如果我将标题添加到
csv
文件中,我的
选择*fromtest1

ID|a|b|c                        |
1  b cA B,C,A,B,C,A,B,C,A,B,C
编辑2

我生成了一个
文件格式
,用于指导我的数据

13.0
3
1    SQLCHQR    0    40    "\t"    1    a    SQL_Latin1_General_CP1_CI_AS
2    SQLCHQR    0    40    "\t"    2    a    SQL_Latin1_General_CP1_CI_AS
3    SQLCHQR    0    40    "\t"    3    a    SQL_Latin1_General_CP1_CI_AS
试图“跳转”到
ID

13.0
4
1    SQLCHQR    0    40    "\t"    2    a    SQL_Latin1_General_CP1_CI_AS
2    SQLCHQR    0    40    "\t"    3    a    SQL_Latin1_General_CP1_CI_AS
3    SQLCHQR    0    40    "\t"    4    a    SQL_Latin1_General_CP1_CI_AS
但我没办法让它工作

bcp test1 in "./file.csv" -S server_name -U login_id -P password -d database_name -f file_name -t
SQLState=S1002,NativeError=0 错误=[Microsoft][ODBC SQL Server驱动程序]描述符索引无效

编辑3

我找到了解决这个问题的办法,但仍然不是好办法。我所做的是: 更改我的
test1
表,将
ID
列放在末尾。
然后在my CSV中的每行末尾添加双逗号,以创建一个新的空列。然后我在
中做了一个简单的
bcp
。我仍然想在第一列中保留
ID
,我只是不想创建一个额外的
视图
,将
ID
放在前面。

第一次编辑,因为
-E
开关的含义相反

您缺少
-E
,因此
BCP
无法知道您正在尝试使用标识列

如果使用此开关,则会从文件中获取值,并忽略SQL Server标识值。您应该在之后执行
DBCC CHECKIDENT('table_name',RESEED)

第二次编辑由于更具体的用户呼啸而起

编辑后@BeGreen指定要使用
格式化文件
。然后,我将发布如何实现这一点的示例。不需要前面的视图,正如我在关于堆栈溢出的其他帖子中看到的:。

示例不一致,因为CSV混合了
“、”
(示例中)和
“\t”
(格式表中)。我将在示例中仅使用
,“

这是可能的,但你必须使用正确的方法

首先,您必须通过以下命令生成格式文件:

bcp <db_name>.dbo.test1 format nul -c -f "generated_format_file.fmt" -t "," -S "<server>\<instance>" -T
*.csv
文件看起来(我已经为测试添加了ID,与应该插入表中的标识值不同):

然后输入正确的命令(注意:使用受信任的连接
-T
而不是
-U
-p
以缩短行):

要检查当前位于test1的标识值,请执行以下操作:

select IDENT_CURRENT('[database_name].[dbo].[test1]')
结果:

(No column name)
4

尝试将标题添加到csv文件。在post上进行了更新以更好地查看结果。我认为
-E
与您所说的正好相反。检查它是否显示:
如果未给出-E,则忽略正在导入的数据文件中此列的标识值,SQL Server会根据创建表期间指定的种子值和增量值自动分配唯一值。
我是否应该尝试使用
文件格式来忽略
ID
列?是的。我将编辑答案。我的意思是,如果您打开了开关,那么您必须为标识列设置自己的ID值。顺便问一下,您是否有
设置标识\u INSERT ON
OFF
?您可以这样做,即打开它,执行bcp插入,然后关闭它,然后执行
重新设定种子
(通过
DBCC
)标识。您可以添加一个ID列(值为10、20、30),该列将被忽略,以查看插入是否对您正确工作(并使用当前为您的表设置的标识)。我尝试使用
文件格式似乎更容易。因此,我生成了一个带有
-f
的文件,但无法将其重新使用<代码>bcp表1在“/file.csv”-S server\U name-U login\U id-P password-d database\U name-f format\U file-t
中,但我得到:
错误无效描述符索引
`@BeGreen查看我的编辑。所有代码都已在我的SQL 2005测试实例上进行了测试,因此它应该适用于最新的SQL Server。
bcp <db_name>.<schema>.test1 IN "import_data.bcp" -f "generated_format_file.fmt" -t "," -S "<server>\<instance>" -T

Starting copy...

4 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 218    Average : (18.35 rows per sec.)
ID  a   b   c
1   A1  B1  C1
2   A2  B2  C2
3   A3  B3  C3
4   A4  B4  C4
select IDENT_CURRENT('[database_name].[dbo].[test1]')
(No column name)
4