2017-03-07 2 views
0

ユーザー入力が必要なクエリで結合しようとしているテーブルが2つあります。私は、ユーザー入力に基づいて変数に1つのテーブルから列名を格納したい、すべての可能な列は、ビットデータ型がtrueまたはfalseになります。変数に格納されている列の値がtrueのTB_Samplesテーブルから行を返し、TB_Projectsテーブルのプロジェクト概要情報と結合したいとします。ここに私のコードは、これまでのところです:変数に列名を格納し、列がTrueの行を返します。

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) 

私はハード今のテストのための私のコードで設定列変数が、私は最終的にこの変数の値は可視StudioでのC#を通じての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 

ただし、この場合、列名は実際の内容を示す必要があります。 。 。 IsElementalAnalysisまたはElementalAnalysisFlag

+0

WHERE ... = 'True'というあなたの提案はうまくいくと思いますが、@SQLQueryの宣言のためにTrueが既に単一引用符の中に入っているので、引用符をどう扱うのでしょうか? @ D.Robertson。 –

+0

。 。おそらく、単一引用符で二重にする必要があります。 2つの単一引用符は、文字列内の単一引用符を表します。 –

+0

'WHERE TB_Samples。[元素分析] = 1'が機能します。今では、 'WHERE TB_Samples 'という列名の変数参照を使用しようとしています。 + @Analysis + '= 1'新しいエラーが発生しました:メッセージ4145、レベル15、状態1、行3 '分析 'の近くで、条件が予想されるコンテキストで指定された非ブール型の式。 –

関連する問題