我在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'
我一直试图解决它,但它确实困扰着我。
您能否解释一下我做错了什么,如果可能的话,请告诉我这样做的正确方法?
答案 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时,文件名未正确构建