2017-03-07 66 views
0

我有兩個表,我試圖加入一個需要用戶輸入的查詢。我想根據用戶輸入在一個變量表中存儲一個表的列名,所有可能的列都是位數據類型爲true或false。我想返回TB_Samples表中的行,其中存儲在變量中的列的值爲true,並且與TB_Projects表中的項目摘要信息結合。這裏是我的代碼至今:在變量和返回行中存儲列名其中列爲真

DECLARE @Analysis nvarchar(20) 
DECLARE @SQLQuery nvarchar(1000) 
SET @Analysis = 'Elemental Analysis' 
SET @SQLQuery = N'SELECT TB_Projects.JobLog#, TB_Projects .ProjName, SUM(TB_Samples.Sample#) 
FROM TB_Projects INNER JOIN TB_Samples ON TB_Projects.JobLog# = TB_Samples.JobLog# 
WHERE TB_Samples.[Elemental Analysis] = True GROUP BY TB_Projects.JobLog#, TB_Projects .ProjName' 
EXECUTE(@SQLQuery) 

我列變量在我的測試代碼難以設置,現在,我終於想傳遞這個變量的值通過C#中可見Studio中SQLSERVER。當前錯誤我收到的狀態:。

消息207,級別16,狀態1,行3 無效列名 '真'」

不知道我要去哪裏錯了

+4

嘗試'TB_Samples。[Elemental Analysis] = 1',假設這是一個比特列。 –

回答

0

錯誤消息是很清楚你有這樣一行:。

WHERE TB_Samples.[Elemental Analysis] = True 

True不能在SQL Server中的關鍵字也許你打算:

WHERE TB_Samples.[Elemental Analysis] = 'True' 

但這只是一個猜測。

我應該注意到,標誌列通常以數字或位的形式存儲),其中0代表假,1代表真。所以,其意圖可能是:

WHERE TB_Samples.[Elemental Analysis] = 1 

但是,如果是這種情況,那麼列名應該顯示它的真實含義。 。 。 IsElementalAnalysisElementalAnalysisFlag

+0

所以我認爲你的WHERE ... ='True'的建議可行,但我的問題是如何照顧引號部分,因爲True已經在單引號內,因爲我聲明瞭@SQLQuery? –

+0

@ D.Robertson。 。 。也許你需要在單引號中加倍。兩個單引號表示字符串中的單引號。 –

+0

'Where TB_Samples。[Elemental Analysis] = 1' works。現在,當我嘗試使用列名稱WHERE TB_Samples的變量引用時。 + @Analysis +'= 1'在語句中發生新的錯誤:消息4145,級別15,狀態1,行3 在「分析」附近預期條件的上下文中指定的非布爾類型表達式。 –

相關問題