2014-03-03 28 views
0

我在動態sql中將字符串(以12 \ 11 \ 2013格式)轉換爲日期時間('YYYY-MM-DD'格式)時出現問題。創建動態sql到rpelace數據庫前綴但獲取錯誤錯誤時出錯msg

可以看到有關示例,並導致以下: DECLARE @dbPrefix VARCHAR(2), @cob VARCHAR(20), @sql VARCHAR(200) DECLARE @m_cobMinusOne日期時間,

@m_cobEOM varchar(20), 
@m_cobEOY varchar(20), 
@m_cobFUN varchar(20) 
set @cob = '12/11/2013' 
set @dbPrefix='q_' 
set @m_cobMinusOne = convert(varchar(20),@m_cobMinusOne,103) 
set @m_cobEOM = convert(varchar(20),@m_cobMinusOne,103) 

exec(N'select ' + @m_cobMinusOne + '= bdh_prev_bus_d ,' + @m_cobEOM + '= bdh_prev_mo_end_d 
from ' [email protected]+'dbbdm005..bdh_bus_date_ref where bdh_bus_d = ''' + @cob + '''') 
+1

「設置m_cobMinusOne =轉換(VARCHAR(20),m_cobMinusOne,103)」? m_cobMinusOne是一個日期時間,爲什麼將一個varchar設置爲日期時間? – esdebon

+0

提示更改exec('...')打印('...')看看它會試圖做什麼。@ m_cobMinusOne將始終爲空,它是否意味着要轉換@cob? –

+0

是的,你是對的,它沒有顯示任何結果和取空值 – user2481687

回答

0

看一看在這裏,你可以做這樣的事情....

declare 
    @dbPrefix  varchar(2), 
    @cob   varchar(20) , 
    @m_cobMinusOne datetime, 
    @m_cobEOM  varchar(20), 
    @SqlQuery  NVARCHAR(MAX); 

set @cob   = '20131211'; 
set @dbPrefix  = 'q_'; 
set @m_cobMinusOne = convert(varchar(20),@m_cobMinusOne,103); 
set @m_cobEOM  = convert(varchar(20),@m_cobMinusOne,103); 

SET @SqlQuery = N'select @m_cobMinusOne = bdh_prev_bus_d , @m_cobEOM = bdh_prev_mo_end_d ' + 
       N'from ' + QUOTENAME(@dbPrefix+'dbbdm005') +'..bdh_bus_date_ref ' + 
       N'where bdh_bus_d = @cob'; 

EXECUTE sp_executesql @SqlQuery     
        ,N'@m_cobMinusOne VARCHAR(20) OUTPUT, @m_cobEOM VARCHAR(20) OUTPUT, @cob VARCHAR(20)' 
        ,@m_cobMinusOne OUTPUT 
        ,@m_cobEOM  OUTPUT 
        ,@cob 
+0

嗨阿里,在表中,bdh_prev_bus_d的值是日期時間格式,如'2013- 12-11'會有什麼問題嗎? – user2481687

+0

如果它是一個日期時間列,那麼你應該使用日期時間變量,一旦你有一個日期時間變量的值,然後以任何你喜歡的方式格式化它,但是你不能將一個值分配給從日期時間列返回的varchar變量 –

+0

好的,我如何檢查它是否返回正確的值? – user2481687