NULL显示为sql中执行bcp命令的输出

时间:2015-07-20 15:14:39

标签: sql-server tsql bcp

我在SQL中使用query实用程序构建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

本身,一切正常

有什么不对?

1 个答案:

答案 0 :(得分:0)

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