我有两个表,我正在尝试加入一个需要用户输入的查询。我想根据用户输入将一个表中的列名存储在一个变量中,所有可能的列都是位数据类型为true或false。我希望从存储在变量中的列的值为true的TB_Samples表中返回行,并与来自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中的SQLServer将该变量的值传递给c#。我收到的当前错误声明:
Msg 207,第16级,状态1,第3行无效列名‘True’。“
不知道我哪里出了问题。
发布于 2017-03-07 12:51:23
错误信息非常清楚。你有这句话:
WHERE TB_Samples.[Elemental Analysis] = TrueTrue不是Server中的关键字。也许你打算:
WHERE TB_Samples.[Elemental Analysis] = 'True'但这只是猜测。
我应该指出,标记列通常以数字或位的形式存储),0表示false,1表示true。因此,其意图可能是:
WHERE TB_Samples.[Elemental Analysis] = 1但是,如果是这样的话,那么列名应该说明它到底是什么。。。IsElementalAnalysis或ElementalAnalysisFlag.
https://stackoverflow.com/questions/42648762
复制相似问题