将列名存储在变量和返回行中,其中列为True

时间:2017-03-07 12:48:07

标签: sql-server tsql

我有两个表,我试图加入一个需要用户输入的查询。我想根据用户输入在一个变量中存储一个表中的列名,所有可能的列都是位数据类型为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)

我的代码中已经将列变量硬设置为现在进行测试,我最终希望在Vis Studio中通过c#将此变量的值传递给SQLServer。我收到的当前错误说明:

  

Msg 207,Level 16,State 1,Line 3   列名称为“True”无效。“

不知道我哪里出错了。

1 个答案:

答案 0 :(得分:0)

错误信息非常清楚。你有这一行:

WHERE TB_Samples.[Elemental Analysis] = True

True不是SQL Server中的关键字。也许你打算:

WHERE TB_Samples.[Elemental Analysis] = 'True'

但这只是猜测。

我应该注意,标志列通常存储为数字或位),0表示false,1表示true。所以,意图可能是:

WHERE TB_Samples.[Elemental Analysis] = 1

但是,如果是这种情况,那么列名应该表明它的真实含义。 。 。 IsElementalAnalysisElementalAnalysisFlag