批量复制(bcp)和批量插入有什么区别?
是否有交换机导出数据库中所有表中的所有数据用于bcp?
我正在使用BCP导入大量数据,我很好奇它有哪些选项来提高此操作的速度.
我读到了几个地方的并行加载,并且看到你可以告诉它不要费心排序数据或检查约束(这对我来说都是可行的选项,因为源是另一个具有良好完整性的数据库).
我没有看到使用这些选项的示例(例如,我不知道什么命令行开关启用并行加载或禁用检查禁用).
有没有人知道学习这个的好资源,或者有人能给我一些简单的例子吗?请不要指向BCP参数帮助页面,关于这些特定选项,我无法做出正面或反面.
任何帮助是极大的赞赏!
尝试使用Python的csv.writer生成的bcp文件时,我遇到了EOF问题.我做了大量的谷歌搜索,没有运气,所以我转向你有用的人在SO
这是错误消息(在subprocess.call()行上触发):
Starting copy...
Unexpected EOF encountered in BCP data-file.
bcp copy in failed
Run Code Online (Sandbox Code Playgroud)
这是代码:
sel_str = 'select blahblahblah...'
result = engine.execute(sel_str) #engine is a SQLAlchemy engine instance
# write to disk temporarily to be able to bcp the results to the db temp table
with open('tempscratch.csv','wb') as temp_bcp_file:
csvw = csv.writer(temp_bcp_file)
for r in result:
csvw.writerow(r)
temp_bcp_file.flush()
# upload the temp scratch file
bcp_string = 'bcp tempdb..collection in @INFILE -c -U username -P password -S DSN'
bcp_string = string.replace(bcp_string,'@INFILE','tempscratch.csv') …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用“Hello World”作为概念证明,sqlcmd但我很难:
命令:
sqlcmd 'cmd.exe'
Run Code Online (Sandbox Code Playgroud)
错误:
找不到存储过程“sqlcmd”。
我在 BCP 上遇到了类似的问题:
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable"
Run Code Online (Sandbox Code Playgroud)
找不到存储过程“bcp”。
这是一台 SQL Server 2014 机器。这是怎么回事,我该如何解决?
我有一个需要使用的多数据库设置,并且两者都有自己的 bcp 版本,它们的行为方式不同。此外,两者都在我的 %PATH% 中,并且 Sybase 一个列在 MS SQL exe 之前,因此从命令行调用“bcp”总是会命中 Sybase exe。
首先,版本是“不同的”:
Sybase BCP: Sybase CTBCP Utility/15.0/P-EBF17890 ESD #24/PC Intel/BUILD1500-123/OPT/Thu May 13 02:45:43 2010(适用于 Adaptive Server Enterprise/15.7/EBF 23008 SMPRS SP1600P /AIX 6.1/ase157sp13x/3819/64-bit/FBO/Sat Aug 23 02:49:06 2014)
MS SQL BCP: 版本:11.0.2100.60(查询命中 SQL 2008 R2 和 2012 SP3 dbs)
他们绝对不会以相同的方式处理文件的输出,并且每个文件的文档都显示了这一点。我在 bcp 上读到的所有内容都说 bcp 在 Sybase 和 MS SQL 之间的工作方式应该相同,但我必须调用完整的 MS SQL bcp.exe 路径来调用 MS SQL 的查询输出,因为 Sybase bcp 不以相同的方式支持查询输出。
我的过程使用批处理脚本调用多个查询,这些查询命中 Sybase DBS,然后 MS SQL 数据库将数据输出到暂存数据库,我是否总是必须区分 Sybase 和 MS SQL bcp,还是我可以只使用一个而没有问题?如果是这样,哪个是“正确”的使用(不是试图在这里引发关于哪个更好的辩论)。此外,我没有看到任何表明版本号有任何关系的东西,所以知道哪个是“最新的”并且使用那个是很困难的。
我必须bcp.exe从 PowerShell 脚本调用。我的代码是:
$dataBase = 'MyDb'
$ProdEinheitTable = 'dbo.ProdEinheit'
$ProzessdatenTable = 'dbo.Prozessdaten_aktuell'
$sqlServerUserName = 'sa'
$sqlServerPassword = 'Password'
$server = 'MSSQLLocalDB'
$bcp = & 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'
Run Code Online (Sandbox Code Playgroud)
我bcp像这样调用该实用程序:
$bcp_args = "$bcp $dataBase.$ProdEinheitTable IN $datFileName -f $fmtFileName -U $sqlServerUserName -P sqlServerPassword -S $server -n"
Invoke-Expression $bcp_args
Run Code Online (Sandbox Code Playgroud)
它给了我错误
用法::术语“用法:”未被识别为 cmdlet、函数、
脚本文件或可运行的程序。检查名称的拼写,或者是否有路径
包含在内,请验证路径是否正确,然后重试。
在行:1 字符:1
+ 用法:C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe { ...
+~~~~~~
+ CategoryInfo : ObjectNotFound: (usage::String) [], CommandNotFoundException
+ FullQualifiedErrorId : CommandNotFoundException
如果我&从字符串中删除,我会得到异常
C:\Program …
我想bcp在Linux中使用该命令,如下所示:
bcp "EasyCash.dbo.user" out "[EasyCash].[dbo].[user].dat" -q -c -t "<EOFD>"
-r "<EORD>" -Usa -P123456 -S192.168.1.5
Run Code Online (Sandbox Code Playgroud)
Linux中的消息显示如下:
-base bcp: command not found
Run Code Online (Sandbox Code Playgroud)
谁能解决我的问题?
我正在阅读此页面,它描述了bcp实用程序。它指出:
本节包含以下示例,这些示例说明如何使用bcp命令创建非XML格式的文件:
Run Code Online (Sandbox Code Playgroud)A. Creating a non-XML format file for native data B. Creating a non-XML format file for character data C. Creating a non-XML format file for Unicode native data D. Creating a non-XML format file for Unicode character data这些示例使用AdventureWorks2012示例数据库中的HumanResources.Department表。HumanResources.Department表包含四列:DepartmentID,Name,GroupName和ModifiedDate。
我不清楚这些类型是什么意思?什么时候使用每个?
谢谢。
bcp ×8
sql-server ×4
bulkinsert ×1
csv ×1
eof ×1
linux ×1
powershell ×1
python ×1
sap-ase ×1
sqlalchemy ×1
sqlcmd ×1