我正在使用BCP,因为我想从表中导出一些列:
bcp DbJamaica.dbo.CS_Usage out "C:\temp\CS_Usage.txt" /U.. /P.. -c -T
这里我排除了我的主键,现在我要导入这个txt,我希望我的主键是自动生成的:
x = pd.DataFrame({'a':[1,5,5], 'b':[7,0,7]})
我总是格式不合理为什么?我也使用格式文件,但我有同样的错误。 这是我的问题:如何排除标识列或某些列?
答案 0 :(得分:1)
据我所知,你不能。 Bcp基本上是批量插入表中,如果列不匹配,则会出错。但是,您可以创建一个临时表,如:
SELECT TOP 0 csusUsageDate, csusType, csusTrack1, csusTrack2, csusTrack3, csusDateReaded, csusLoggedIn
INTO [DbJamaica].[dbo].[CS_Usage_TEMP]
FROM [DbJamaica].[dbo].[CS_Usage]
然后您可以在临时表上使用bcp:
bcp DbJamaica.dbo.CS_Usage_TEMP out "C:\temp\CS_Usage.txt" /U.. /P.. -c -T
接下来,您可以将分段中的数据插入到实际表中,并将PK列设置为IDENTITY
:
INSERT INTO DbJamaica.dbo.CS_Usage (csusUsageDate, csusType, csusTrack1, csusTrack2, csusTrack3, csusDateReaded, csusLoggedIn)
SELECT csusUsageDate, csusType, csusTrack1, csusTrack2, csusTrack3, csusDateReaded, csusLoggedIn
FROM DbJamaica.dbo.CS_Usage_TEMP
最后清理:
DROP TABLE DbJamaica.dbo.CS_Usage_TEMP
答案 1 :(得分:0)
您的源文件应与目标表结构匹配。也就是说,表中的列数应与csv / txt(源文件)中的列数匹配。
就您而言,即使PK列是标识列,您也必须在源文件中包含该列。 SQL Server将负责将列标识为标识,并且将忽略您在此处输入的值。因此,无论您有没有价值,您的bcp都可以使用。
如果要保留身份值,则使用情况不同。请参阅文档(bcp utility)中的-E参数