选定列的参数化查询

sta*_*lol 0 r

我想在 sql 查询中选择列上的参数:
select ? from my_table

我用glue_sql尝试过:
glue::glue_sql(con, "select {x} from my_table", x=noquotes("mycolumn"))

但结果是:

从 my_table 中选择“mycolumn”

代替:

从 my_table 中选择 mycolumn

有任何想法吗?

r2e*_*ans 5

您试图不引用标识符或正确引用它(用双引号)。帮助中指出:

如果粘合表达式被反引号包围,它们会自动引用字符结果、引用标识符

尝试:

glue::glue_sql(.con=con, "select {`x`} from my_table", x="mycolumn")
# <SQL> select "mycolumn" from my_table
Run Code Online (Sandbox Code Playgroud)

如果其他读者想知道为什么单引号不好,单引号将其创建为字符串文字,这意味着它将作为data返回,而不是作为列标题。例如,使用一些带有Id字段的表:

DBI::dbGetQuery(con, "select 'Id' from sometable limit 3")
#     
# 1 Id
# 2 Id
# 3 Id
Run Code Online (Sandbox Code Playgroud)

(注意没有列标题,正确的查询可能已将字符串文字命名为select 'Id' as somecolumnname ...,但此时就很清楚为什么单引号不正确了。)

DBI::dbGetQuery(con, 'select "Id" from sometable limit 3')
#                                     Id
# 1 03E33A23-3F2C-1234-5678-90ABCDEF1234
# 2 04E33A23-3F2C-1234-5678-90ABCDEF1234
# 3 8114F80C-624D-1234-5678-90ABCDEF1234
Run Code Online (Sandbox Code Playgroud)