【问题标题】:Whats wrong with this bcp utility?这个 bcp 实用程序有什么问题?
【发布时间】:2011-04-16 10:11:06
【问题描述】:

我正在尝试使用 bcp 实用程序将数据导出到文本文件中?我无法弄清楚我在这里做错了什么:-

Declare @Cmd nvarchar(1000)
Declare @Query nvarchar(1000)
Declare @Path nvarchar(500)
Declare @ServerName nvarchar(500)
Declare @UserName nvarchar(50)
Declare @Password nvarchar(50)
Declare @Delimiter char(1)

SET @Path = 'c:\abc.txt'
SET @ServerName = '10.10.10.10\instance1'
Set @UserName = 'sa'
Set @Password = '123456'
Set @Delimiter = '!'

SET @Query = 'SELECT [ID]
          , NULL
          ,[NAME]
          ,[STREET1] + '' '' + [STREET2] as [Address]
          ,[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City
          ,[PHONE] 
          ,[FAX]
          ,''Title'' as [Title]
          ,[Country]
FROM [temp01]'
SET @Cmd = 'bcp "' + @Query + '" queryout "' +  @Path +
         '" -c -S' + @ServerName + ' -U' + @UserName + ' -P' + 
        @Password + ' -t' + @Delimiter + ''
EXEC master..xp_cmdshell @Cmd

它没有将任何数据写入文件。在结果框中,我得到了这个输出:-

用法:bcp {dbtable |查询} {在 |出|查询 |格式}数据文件 [-m maxerrors] [-f 格式文件] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n 本机类型] [-c 字符类型] [-w 宽字符类型] [-N 保持非文本原生] [-V 文件格式版本] [-q 引用标识符] [-C 代码页说明符] [-t 字段终止符] [-r 行终止符] [-i 输入文件] [-o 输出文件] [-a 数据包大小] [-S 服务器名称] [-U 用户名] [-P 密码] [-T 可信连接] [-v 版本] [-R 区域启用] [-k 保留空值] [-E 保留标识值] [-h "加载提示"] 空值 [-h "加载提示"] NULL

请帮忙。

【问题讨论】:

  • @gbn: bcp "SELECT [ID], NULL,[NAME] ,[STREET1] + ' ' + [STREET2] 作为 [Address] ,[CITY] + ' ' + [PROVINCE] + ' ' + [POSTAL] 作为城市 ,[PHONE] ,[FAX] ,'TITLE' 作为 [Title] ,[Country] FROM [temp01]" queryout "c:\abc.txt" -c -S10.10.10.10 \instance1 -Usa -P123456 -t!

标签: sql database sql-server-2005 tsql bcp


【解决方案1】:

我在我的数据库中尝试时发现了同样的问题, 因此我得出结论 你正在使用

SET @Query = 'SELECT [ID]
           , NULL
           ,[NAME]
           ,[STREET1] + '' '' + [STREET2] as [Address]
           ,[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City
           ,[PHONE] 
           ,[FAX]
           ,''Title'' as [Title]
           ,[Country] FROM [temp01]'

如果你使用

SET @Query = 'SELECT [ID], NULL ,[NAME],[STREET1] + '' '' + [STREET2] as [Address],[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City,[PHONE],[FAX],''Title'' as [Title],[Country] FROM [temp01]'

在查询中没有任何新行的情况下可以正常工作 只是因为它不接受中间的空间。

谢谢

【讨论】:

    【解决方案2】:

    SET @Cmd = 'bcp "' + REPLACE(REPLACE(REPLACE(,CHAR(9),CHAR(32)),CHAR(13),CHAR(32)),CHAR(10),'')@查询 + '" 查询输出 "' + @Path + '" -c -S' + @ServerName + '-U' + @UserName + '-P' + @Password + '-t' + @Delimiter + ''

    【讨论】:

      【解决方案3】:

      这个问题很老了,但我也遇到过同样的问题。您需要将整个命令驻留在一行中。删除@Query 和@Cmd 中的所有换行符。

      【讨论】:

        【解决方案4】:

        你必须提供一个数据库。您仅将实例定义为表但没有数据库。尝试更改您的选择状态,例如: ...from [yourDB].[temp01]...

        【讨论】:

          【解决方案5】:

          我认为您的 -S 开关后需要一个空格。另外,一般来说,在调试复杂的东西时,会降低复杂性,直到你能确定问题出在哪里。在这种情况下,您可以一次移除每个开关(或移除所有开关以开始)以确定是否是导致问题的原因。

          【讨论】:

          • 不,很遗憾它在 -S Switch 之后不是空格?
          • 尝试将您的代码更改为 SET @Cmd = 'bcp "' + @Query + '" queryout "' + @Path 仅用于测试。另外,尝试简化您的查询,例如 SET @Query = 'SELECT [ID] FROM [temp01]'
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-25
          • 1970-01-01
          • 1970-01-01
          • 2019-12-05
          • 1970-01-01
          相关资源
          最近更新 更多