我正在使用浮点值表,但我按参数
输入列SELECT AVG(@var)AS Aver 来自ListVal
当我输入列名(参数)时,我收到一个错误:数据类型nvarchar对avg运算符无效。但所有列都是浮动的。
帮助!!!请
答案 0 :(得分:4)
您必须使用动态SQL
e.g。
EXEC( 'SELECT AVG( [' + @var + '] ) AS Aver FROM ListVal' )
答案 1 :(得分:2)
查询参数替代单个文字值,而不是列名。这是标准的SQL行为,在每个RDBMS品牌中都支持相同的行为。
因此,您提供了一个列的名称,就像您运行此查询一样:
SELECT AVG('columnname') ...
这是一项毫无意义的操作。什么是字符串的AVG()
?
@Matt Rogish在他的answer中是正确的,使列名(或表名或其他SQL语法)动态化的唯一方法是使用动态SQL。也就是说,将应用程序变量插入到字符串中,然后将结果字符串用作SQL查询。
您只能使用查询参数来注入单个标量值,这就是查询在参数中的解释方式。