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