2015-07-20 65 views
2

我在SQL中爲我的bcp命令構建查詢。 當執行我有以下錯誤的語句:SQL中用於bcp命令的查詢語法有些問題

Conversion failed when converting the varchar value '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 = ' to data type 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

在這個查詢的哪一行你會得到那個錯誤信息?你可以驗證這是正在執行的* actual *查詢(除了可能的sharedDevFolder值),而不是你爲這個問題改變了什麼嗎?例如,你可以驗證@input的類型實際上是一個varchar,並且在創建@query時確實使用了這個變量,並且設置@query的行不會使用'...'+ 201507',而你只是認爲變量看起來更好? –

+0

只是一個提示,而不是單引號,請爲您的標識符嘗試方括號([,])。 – cjb110

+0

沒有線指示符。只是'bcp'命令沒有執行 – gene

回答

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) 
+0

我有它的第二種方式,完全一樣,你展示,它仍然無法正常工作。我用查詢輸出更新了我的問題。我打印出最終的查詢。可能是這可以給我一些線索,我做錯了什麼 – gene

0

這是由於事實上查詢'SELECT''Transaction ...'是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) + '''' 
+0

我試過你的建議,但仍然有一個'NULL'作爲輸出。聲明,如果執行,應該創建一個文件,但它不。 – gene

+0

@gene然後它做了什麼? – cjb110

+0

我更新了我的問題與最終查詢輸出。這對我來說很好。 – gene

0

我固定的問題。問題是我沒有設置用於構建文件名的變量。當執行bcp時,文件名稱沒有正確構建