我需要将数据导出到一个巨大的表中的文件,只有一列但数千行,其中行的排序很重要.我正在使用下面的bcp命令
bcp DBNAME.dbo.tblName out mydata.dat -Uusername -Ppassword -c
我检查了10行的表,我看到行的顺序保存在数据文件中.但是,如果行数超过10000,我可以假设bcp会保持顺序吗?
我花了一整天的时间在网上搜索答案。显然 tsql 没有自己漂亮的写入文件命令。这是我的困境
我有一个正在创建的加载文件,其中一行的长度可以达到 10K+。SQL Server varchar(MAX) 限制是 8000(所以我相信)所以我把这些行分成几个变量。我尝试进行打印,但窗口窗格允许 4000。解决方法是一次打印一个变量的这些断行,但这对于体力劳动来说可能会变得乏味,所以我选择将其写入 txt 文件中,一次一个变量时间。
我通过 xpcommandshell 研究了 BCP,它看起来很有希望。问题是我可以让这行在命令提示符下工作,但完全相同的行在 TSQL 查询上不起作用:
declare @cmd varchar(8000)
select @cmd = 'bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T'
exec master..xp_cmdshell @cmd
Run Code Online (Sandbox Code Playgroud)
bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T 在命令提示符下工作得很好
尽管取得了一点进展,但我的经理不想走那条路。因此,在通过在 SQL 上执行以下行启用 sp_configure 后,我选择了 sp_OACreate 和 sp_OAMethod:sp_configure 'Ole Automation Procedures', 1
这条路线的第一行是这样的:
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT
Run Code Online (Sandbox Code Playgroud)
@hr 给出一个 0 所以这很好,但 @objFileSystem 产生 16711422 并且 @hr …
我需要将一个相当大的SQL Server表~100GB导出到CSV文件.但不是输出是一个单独的csv文件,理想情况下应该是多个文件说10个文件,每个10GB.
我看到BCP有一个batch_size参数,但是这仍然会将所有数据写入一个文件?是否有其他免费的公用事业可以满足我的需求?文件大小可以以字节还是以行数指定的位置?
对于一些上下文,这是因为数据可以与Hive/Hadoop平台中的其他源组合,因此如果有更好的方式导出数据,我会打开建议.
我有以下代码将大量插入到sql服务器(取自此处底部的示例):
SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard ON
EXECUTE XP_CMDSHELL 'BCP AT100Reporting.dbo.Reported_Driver_ScoreCard out D:\temp\Reported_Driver_ScoreCard.txt -T -n'
BULK INSERT [dbo].Reporting_DriverScoreCard
FROM 'D:\temp\Reported_Driver_ScoreCard.txt'
WITH
(
DATAFILETYPE = 'native',
ERRORFILE = 'D:\temp\error.txt',
MAXERRORS = 10000
);
SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard OFF
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此命令时,它将失败并显示以下错误消息:
Explicit value must be specified for identity column in table 'Reporting_DriverScoreCard' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.
我认为这是因为正在创建的txt文件的末尾有一行额外的行,因此它尝试在到达文件末尾时插入空白行(所有其他行均已为其设置了标识)。 )
有什么方法可以使它正常工作,因为我要使用多个海量数据库?
我需要将表格BCP到制表符分隔文件中,但我需要表格第一条记录中的列名称.问题1:我是否认为BCP没有这方面的转换?问题2:如果没有,为什么?
我试着做以下事情:
BCP "declare @colnames varchar(max); select @colnames=coalesce (@colnames+char(9), '')
+ Column_Name from db.information_Schema.columns where table_name='table1' order by
ordinal_position; select @colnames" queryout Table1_Columns.tsv -S?? -U?? -P?? -f** -e**
Run Code Online (Sandbox Code Playgroud)
格式文件如下所示:
9.0
1
1 SQLCHAR 0 100 "\r\n" 1 Column_Names SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)
这给我一个列名的文件,然后第二个BCP命令给我一个数据文件,我只是将两个DOS复制到一起.问题3:我聪明还是什么?问题4:为什么不起作用?我收到错误:
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Native Client]Host-file columns may be skipped only when
copying into the Server
Run Code Online (Sandbox Code Playgroud) 我有一个存储过程存储临时表中的值.
这一切都运作良好,但我不能用它
exec master..xp_cmdshell 'bcp "exec sp_test '2006-07-21' " queryout c:\test.txt -c '
Run Code Online (Sandbox Code Playgroud)
如果我将表更改为常规表,那么一切正常.你不能用这种方式使用临时表吗?
我不一定要分享代码,因为它包含公司的东西,但它基本上是这样的
SELECT
*
INTO #Extractr
FROM
TABLE A
WHERE ID in (4,9,14)
Run Code Online (Sandbox Code Playgroud)
错误消息是 invalid object #Extractr
谢谢!
您好,我正在 BCP 查询下方运行以获取数据
exec master.dbo.xp_cmdshell 'bcp "select top 10 ProductFamilyID,ProductSetID,ProductFamilyCode,ProductFamilyName from MPLA.dbo.tblLCFProductFamily" queryout D:\requirement.txt -w -T -S "server_name"'
我通过连接我的 localdb 在 SSMS 2012 上运行它。我也可以访问查询中给出的服务器,但仍然遇到以下错误:
SQLState = 28000, NativeError = 18456
Error = [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'FAREAST\D--113062586$'.
NULL
Run Code Online (Sandbox Code Playgroud)
FAREAST\D--113062586$我的 localdb 中甚至不存在提到的用户。如何克服这个问题?
BULK INSERT [Alldlyinventory]
FROM 'C:\Users\Admin\Documents\2NobleEstates\DATA\Download\Output\test.txt'
WITH (FORMATFILE = 'C:\SQL Data\FormatFiles\test.xml');
Run Code Online (Sandbox Code Playgroud)
格式文件:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharFixed" LENGTH="8" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="7" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="4" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="10" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="DAY_NUMBER" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="LCBO_NO" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="LOCATION_NUMBER" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="LISTING_STATUS" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="QTY_ON_HAND" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
Run Code Online (Sandbox Code Playgroud)
但我在SQL Server 2014上收到以下错误:
消息4832,级别16,状态1,行1批量加载:在数据文件中遇到意外的文件结尾.消息7399,级别16,状态1,行1链接服务器"(null)"的OLE DB提供程序"BULK"报告错误.提供商未提供有关错误的任何信息.消息7330,级别16,状态2,行1无法从OLE DB提供程序"BULK"获取链接服务器"(null)"的行.
这是一个固定宽度导入.
示例txt:
2016032803170570371L 000000014
2016032803367430371L 000000013
2016032803403800371L 000000036 …Run Code Online (Sandbox Code Playgroud) 在这篇关于使用 BCP 或 SQLCMD 通过 TSQL 将数据导出到 XML 的博客文章中,我遇到了这行代码:
:XML ON
SELECT
*
FROM
dbo02.ExcelTest
FOR XML AUTO, ELEMENTS, ROOT('doc')
Run Code Online (Sandbox Code Playgroud)
我尝试在 sql 查询中使用它,然后通过批处理文件中的 sqlcmd 触发,它确实返回了正确的 xml 文件。如果没有它,:XML ON它会返回网页上所述的奇怪值。
奇怪的是,SSMS (2008) 在解析或执行查询时显示错误的语法。
有什么:XML ON作用以及如何使用它?为什么 SSMS 无法识别该代码行?
I\xe2\x80\x99m 使用调用 xp_cmdshell 的 SQL 存储过程。xp_cmdshell 已启用,并且代理帐户设置为 \xe2\x80\x98vpexporter\xe2\x80\x99。该存储过程旨在将数据文件写入磁盘。
\n\n该存储过程在 SQL 2005 服务器上时一直在工作。环境已升级到SQL 2012,sproc不再运行。拨打电话的线路是:
\n\nset @sql1 = \'bcp "SELECT * FROM dbo.udPayrollOutput" queryout "D:\\Repository\\Exports\\\' + @fileunique -Uvpexporter -Ppassword -c -t,\' \nexec master..xp_cmdshell @sql1\nRun Code Online (Sandbox Code Playgroud)\n\n在 SSMS 中运行它会给出以下结果:
\n\n\n\n\nSQLState = 28000。NativeError = 18456 错误 = [Microsoft][SQL Server\n Native Client 11.0][SQL Server]用户 \xe2\x80\x98vpexporter\xe2\x80\x99 登录失败。
\n
我已经尝试过使用 SQL 登录和域帐户进行此操作。两者都返回相同的错误。\xe2\x80\x98vpexporter\xe2\x80\x99 已添加为登录名,并已设置为具有 xp_cmdshell 执行权限的主数据库用户。
\n\n我觉得 SQL 版本 2012 的 xp_cmdshell 调用方式一定发生了变化,但我在谷歌搜索时还没有发现任何东西。
\n\n我尝试运行“exec xp_cmdshell \'whoami.exe\'”,它返回\'nt Authority\\network service\',这是 SQL Server 正在运行的帐户。 …
bcp ×10
sql-server ×7
sql ×3
t-sql ×3
bulkinsert ×2
database ×1
file-io ×1
hive ×1
ole ×1
sqlcmd ×1
ssms-2012 ×1
xml ×1
xp-cmdshell ×1