SQL数据库中如何使用SELECT+参数+FROM?

Posted

技术标签:

【中文标题】SQL数据库中如何使用SELECT+参数+FROM?【英文标题】:How to use SELECT + parameter + FROM in SQL database? 【发布时间】:2021-07-20 20:43:38 【问题描述】:

我想知道是否可以创建这样的查询:

SELECT :parameterA, :paramaterB 
FROM *someTable*;

我们的想法是使用类似的结构,而不是制作某种字符串或类似的东西。

我在 Visual Studio 2019 中使用 SQL 数据库和 C# 项目。

到目前为止,我有这个代码:

    public List<V_Requerimientos> GetData(int idEmpresa, string columns)
    
        List<V_Requerimientos> result = null;

        try
        
            var dyParam = new OracleDynamicParameters();
            dyParam.Add("idEmpresa", OracleDbType.Int32, ParameterDirection.Input, value: idEmpresa);

            var conn = this.GetConnection();

            if (conn.State == ConnectionState.Closed)
            
                conn.Open();
            

            if (conn.State == ConnectionState.Open)
            
                string query = "SELECT " + columns + "FROM V_REQUERIMIENTOS " +                      
                    "WHERE EMPR_CODIGO = :idEmpresa AND ETAR_CODIGO <> 4";
                result= conn.Query<V_Requerimientos>(query, dyParam).ToList();

                conn.Close();
            
        
        catch (Exception e)
        
            throw e;
        

        return result;

idEmpresa 是前面所选对象的 PK,columns 是一个字符串,其中包含我要为该对象选择的列。

我想知道是否有任何方法可以替换发送到方法的参数的列,而不是像我目前使用的那样使用串联查询。

【问题讨论】:

我正在使用 SQL 数据库... 那到底是哪个 SQL 数据库平台? 是的,这可以通过几种方式完成。您能否更新您的帖子以包含您已完成的内容和无效的内容,以便我们为您提供帮助? 您不能将列指定为参数。 SQL 查询本质上是由服务器编译成执行计划的程序。表和列是类型。如果它们发生变化,您需要编译一个新程序。这不是命名问题。如果相同的查询被索引覆盖,如果唯一值太少,如果 CHECK 约束告诉服务器期望什么值等,相同的查询将导致不同的执行计划(即编译的程序)。参数仅用于传递 values 到一个查询,同样的方式函数参数做 如果您想在运行时更改列,您需要动态创建 SQL 查询,或者使用 ORM 来执行此操作 【参考方案1】:

SQL 参数用于在 where 子句中指定值。您不会对列名使用参数。您的查询应该看起来更像这样。

string colA = "Customer Id";
string colB = "Customer Name";
string sql = $"Select [colA], [colB] from table";

【讨论】:

以上是关于SQL数据库中如何使用SELECT+参数+FROM?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写参数化的 SQL 查询?

使用R,如何在SQL Server数据库上获取“dbo”参数?

ibatis中xml文件中sql语句如何把oracle中取出来的数据设为10条

求助,FineReport使用SQL数据集参数

9.MySQL数据查询SQL

如何使用SQL语句消除重复列