【问题标题】:NULL is displayed as an output of executing bcp command in sqlNULL 显示为在 sql 中执行 bcp 命令的输出
【发布时间】:2015-07-20 15:14:39
【问题描述】:

我正在构建一个 query 以在 SQL 中使用 bcp 实用程序执行。

执行查询后,我得到一个NULL 结果作为输出。

我已经问过一个相关讨论的问题,但问题集中在不同类型的错误上。

这是我的查询:

DECLARE @query VARCHAR(2000)
DECLARE @bcpCommand VARCHAR(1024)
DECLARE @sharedDevFolder VARCHAR(500)
DECLARE @fileName VARCHAR(200)
DECLARE @environment VARCHAR(5)
DECLARE @customerCode VARCHAR(5)
DECLARE @parserConfig VARCHAR(5)
DECLARE @bucketAssign VARCHAR(10)
DECLARE @dateFormat VARCHAR(15)
DECLARE @input INT
DECLARE @RC INT

SET @sharedDevFolder = '\\REMOTE_SERVER\DATAFOLDER\'
SET @input = 201507
SET @environment = 'DEV'
SET @customerCode = '123'
SET @parserConfig = '100'
SET @bucketAssign = 'Bucket1'
SET @fileName = 'Transaction-' + 
                    @environment + '-' + 
                    @customerCode + '-' + 
                    @parserConfig + '-' + 
                    @bucketAssign + '-' + 
                    @dateFormat + '.txt'

SET @query = 
        'SELECT ''Transaction Unique ID'',''Transaction Date'', ''Person Unique ID'' 
        UNION ALL SELECT NULL AS ''Transaction Unique ID'', CONVERT(VARCHAR(10),CONVERT(DATETIME,Date,1),101) AS ''Transaction Date'', 
        NULL AS ''Person Unique ID'' FROM tblChromeRiverInitData WHERE YYYYMM = ''' + CAST(@input as VARCHAR) + ''''

select @query

    --need to change @sharedDevFolder depending on a server environment
SET @bcpCommand = 'bcp "' + @query + '" queryout "'
    set @bcpCommand = @bcpCommand + @sharedDevFolder + @fileName + '" -c  -T -t^| -r\n'

EXEC @RC = master..xp_cmdshell @bcpCommand

这是我显示的最终查询语法,以确保我的查询正确:

SELECT 'Transaction Unique ID','Transaction Date', 'Person Unique ID' UNION ALL SELECT NULL AS 'Transaction Unique ID', CONVERT(VARCHAR(10),CONVERT(DATETIME,Date,1),101) AS 'Transaction Date', NULL AS 'Person Unique ID' FROM tblChromeRiverInitData WHERE YYYYMM = '201507'

在我看来这很好。

但是,当执行时

SELECT 'Transaction Unique ID','Transaction Date', 'Person Unique ID' UNION ALL SELECT NULL AS 'Transaction Unique ID', CONVERT(VARCHAR(10),CONVERT(DATETIME,Date,1),101) AS 'Transaction Date', NULL AS 'Person Unique ID' FROM tblChromeRiverInitData WHERE YYYYMM = @input

就其本身而言,一切正常

有什么问题?

【问题讨论】:

  • 您的表中有与 where where 匹配的数据?
  • 实际上,如果我有 select * from tblChromeRiverInitData 作为查询,我的 bcp 命令就会执行。由于其他一些要求,我决定将查询更改为不同的组合。这就是我开始遇到问题的地方
  • 你修改的查询是否独立工作?
  • 是的,我修改后的查询独立工作。我更新了我的问题

标签: sql-server tsql bcp


【解决方案1】:

我不确定这是您的问题,还是我在尝试复制您的问题时遇到的问题。当我设置 @query 时,我将部分 select 语句放在一行,然后按 Enter 并将我的更多语句放在下一行。当我运行它时,我得到的输出是“用法:bcp {dbtable | query} {in | out | queryout | format} datafile ...NULL。”但是,当我将语句放在一行上时,一切正常。我认为这不是数据类型大小的问题,因为我尝试将 @query 和 @bcpcommand 增加到 4000 并且仍然遇到相同的错误。我希望这会有所帮助!

【讨论】:

  • 我所有的东西都在同一行
  • 好的。我认为我的不起作用的原因是它实际上是试图在命令行的新行上执行每个部分。我会看看我是否能想出另一个答案。
  • 我能够更仔细地复制您的问题。我认为问题是您的文件名。 @dateFormat 变量正在声明,但未设置。当我从文件名中删除它时,一切似乎都正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2023-01-27
  • 2012-01-31
  • 2015-09-25
相关资源
最近更新 更多