SQL中的bcp命令的查询语法有问题

时间:2015-07-20 13:36:38

标签: sql-server bcp

我在SQL中为我的bcp命令构建查询。 执行语句时,我有以下错误:

  

转换varchar值' SELECT时转换失败   '交易唯一ID','交易日期','人员唯一ID'             UNION ALL SELECT NULL AS' Transaction Unique ID',   CONVERT(VARCHAR(10),CONVERT(DATETIME,Date,1),101)AS'交易   日期',NULL AS'人员唯一ID' FROM tblChromeRiverInitData WHERE   YYYYMM ='数据类型int。

这是我的bcp命令的语法:

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 VARCHAR(15)
DECLARE @RC int

SET @sharedDevFolder = '\\REMOTE_SERVER\MyDirectory\'
SET @input = 201507
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(10))

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'

我一直试图解决它,但它确实困扰着我。

您能否解释一下我做错了什么,如果可能的话,请告诉我这样做的正确方法?

3 个答案:

答案 0 :(得分:1)

您的数据类型不匹配。查询结尾处的+ @input是个问题。

我猜测列[YYYYMM]是一个数字?它应该是一个字符串/ varchar。

所以你的行可能是

declare @input as varchar
set @input = '201505'
set @query = 'SELECT ''Transaction Unique ID'',''Transaction Date''...WHERE YYYYMM = ''' + @input + ''''

如果[YYYYMM]是一个字符串,或者它不是,那就是数字

declare @input as int
set @input = 201505
set @query = 'SELECT ''Transaction Unique ID'',''Transaction Date''...WHERE YYYYMM = ' + cast(@input as varchar)

答案 1 :(得分:0)

这是因为查询' SELECT''         是varchar,输入表示为INT,尽管它是varchar。使用:

    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 = ''' + CONVERT(VARCHAR, @input) + ''''

答案 2 :(得分:0)

我解决了这个问题。问题是我没有设置用于构建文件名的变量。执行bcp时,文件名未正确构建