【发布时间】:2009-09-24 16:02:51
【问题描述】:
我正在使用浮点值表,但我按参数输入列
选择 AVG(@var) 作为 Aver FROM ListVal
当我输入列名(参数)时,我收到一个错误:数据类型 nvarchar 对 avg 运算符无效。但是所有的列都是浮动的。
帮助!!!请
【问题讨论】:
-
使用感叹号(在代码块之外)有点不礼貌
标签: sql select parameters average
我正在使用浮点值表,但我按参数输入列
选择 AVG(@var) 作为 Aver FROM ListVal
当我输入列名(参数)时,我收到一个错误:数据类型 nvarchar 对 avg 运算符无效。但是所有的列都是浮动的。
帮助!!!请
【问题讨论】:
标签: sql select parameters average
你必须使用动态 SQL
例如
EXEC( 'SELECT AVG( [' + @var + '] ) AS Aver FROM ListVal' )
【讨论】:
查询参数替代单个文字值,而不是列名。这是标准 SQL 行为,每个品牌的 RDBMS 都支持相同的行为。
所以你提供了一个列的名称,就好像你运行了这个查询:
SELECT AVG('columnname') ...
这是一个毫无意义的操作。字符串的AVG() 是什么?
@Matt Rogish 在他的answer 中是正确的,即使列名(或表名或其他 SQL 语法)动态化的唯一方法是使用动态 SQL。即,将应用程序变量插入字符串,然后将生成的字符串用作 SQL 查询。
您只能使用查询参数来注入单个标量值,这就是参数在查询中的解释方式。
【讨论】: