2017-07-17 66 views
1

我試圖使用temp變量從表中檢索數據。臨時變量返回正確的數據,但當試圖在查詢中使用它時,它不會返回正確的數據集。 我試圖在查詢中使用硬編碼的臨時值檢索數據,它工作正常。任何人都可以幫我找到這個問題。選擇查詢中使用的Temp變量

下面是我的代碼,我已經試過

Declare @tempwordFinal varchar(50)          
select @tempwordFinal = ''''+'%'+'The Big Bang'+'%'+''''    
select @tempwordFinal --here the output is - '%The Big Bang%' 

SELECT * from MasterProgram where ProgramTitle like @tempwordFinal --not working 
SELECT * from MasterProgram where ProgramTitle like '%The Big Bang%' -- working 

回答

0

的問題是你(逃脫)額外的單引號。像這樣''''。除非您在數據庫中查找明確包含撇號的單詞,否則不需要這些單詞。更正後的代碼看起來是這樣的:

Declare @tempwordFinal As Varchar(50); 

Set @tempwordFinal = '%The Big Bang%'; 

Select @tempwordFinal; -- %The Big Bang% 

SELECT * from MasterProgram where ProgramTitle like @tempwordFinal; 
+0

請解釋此代碼的作用,請勿像這樣刪除代碼。 – Boiethios

1

因爲@tempwordFinal變量在開始和結束的單引號。所以它預計ProgramTitle列中的數據在開始和結束時都有單引號。除了通配符外,變量中的任何內容都將被視爲數據,這就是它失敗的原因。

select @tempwordFinal --here the output is - '%The Big Bang%' 
              ^   ^

當您使用變量varchar數據類型,我們並不需要使用單引號試試這個辦法

Declare @tempwordFinal varchar(50)          
select @tempwordFinal = '%The Big Bang%' 

select 1 where 'The Big Bang' like @tempwordFinal 

。只有當您硬編碼字符串常量時才需要單引號