【发布时间】:2021-04-07 11:48:14
【问题描述】:
我在SQL中做了一个代码,将一个项目与一列的每条记录分开而不重复,并且它工作正常,请按照以下代码:
SELECT DISTINCT Tab_Dados_Escolha.Nome_Produto FROM Tab_Dados_Escolha
但是我想用一个外部变量替换这个例程将在其中完成的列的名称,所以我可以对其他列使用相同的代码,而不必重写另一个代码,我无法做到这一点到目前为止,有人可以帮助我吗?
【问题讨论】:
-
您必须使用动态 SQL —— 即将查询构造为字符串,然后执行它。不建议这样做,因为它会使代码容易受到 SQL 注入攻击和意外的语法错误。
-
您不能使用变量来替换文字,您必须使用动态 SQL 并且 安全地 将值注入语句中。此外,对于这样的事情,您最好使用
DISTINCT而不是GROUP BY。GROUP BY意味着在执行某种形式的聚合时使用。 -
你不能。表和列等价于强类型函数语言中的类型和字段。当查询引擎解析查询时,必须知道它们的模式。 SQL 查询是编译成执行计划的语言,就像 C# 或 F# 代码编译成可执行文件一样。查询参数与程序的参数相同。它们不会影响已编译的程序,它们是它使用的数据
-
我怀疑这真的是XY Problem。您在这里真正要解决的问题是什么?
-
确实,该查询本质上是一个
DISTINCT。那为什么要使用GROUP BY呢?你想避免什么重复?您是否尝试像 Pandas 或 .NET DataFrame 那样分析表格的内容?这些库不会单独计算度量,因为这需要多次读取数据。为每一列执行 DISTINCT 意味着您多次扫描整个表。这些库在逐行扫描数据的同时计算多个度量
标签: sql sql-server database