当前位置: 首页 > 面试题库 >

如何使用占位符将列名值作为SQL参数传递

郭远
2023-03-14
问题内容

如何使用参数占位符将列名值作为SQL参数传递?

目标是使此工作正常进行:

var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");

choice 是一个变量,它将存储 column name

@0column name(并且我没有成功将其作为参数传递)

@1是一个search string(我对此没有问题)

已经阅读并尝试了很多东西:

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");

低于一投 Column name not valid = '@0'

var sql = "SELECT * FROM Condos WHERE [@0] LIKE @1"
var sqlData = db.Query(sql,choice,"%"+searchString+"%");

低于一投 Column name not valid = 'choice'

var sql "SELECT * FROM Condos WHERE choice LIKE @0");
var sqlData = db.Query(sql,"%"+searchString+"%");

低于一投 Must declare scalar variable "@choice"

var sql "SELECT * FROM Condos WHERE @choice LIKE @0");
var sqlData = db.Query(sql,"%"+searchString+"%");

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE '"+choice+"' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

下一个:BIG CRASH

var sql = "SELECT * FROM Condos WHERE '"+@choice+"' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

低于一投 Column name not valid = 'NameShort'

这正是正确的列名

var sql = "SELECT * FROM Condos WHERE ['"+choice+"'] LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

下一个:BIG CRASH

var sql = "SELECT * FROM Condos WHERE ['"+@choice+"'] LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

帮助 !!!!!!!!!!!!!!


问题答案:

简短的答案是你不能;参数仅支持 ,不支持 列名

您必须像Richard所说的那样依靠直接文本插入(无论是在代码中发生还是通过使用SQL Server
exec()函数发生),或者使用某种可以使您构造查询的库(如LINQ)动态地,然后将其转换为文本表示形式。

如果您使用直接文本插入路线,请 确保您不允许插入直接用户输入。 自己进行 某种翻译 以避免SQL Injection攻击。



 类似资料:
  • 我只是想知道如何在Spring Data JPA中将列名及其值传递给@Query注释。 基本上,列名是静态的,我们通常把每个列作为一个元素放在实体类中。但这里我想要一些不同的东西,这里列名将是动态的,我将把这个值作为参数传递给在存储库中定义的方法。 表格-日历 列-id,PersonName,1,2,3......31

  • 问题内容: 我有一个整数或字符串列表,需要将其作为Delphi DataSet的参数传递。怎么做? 这是一个例子。MyQuery类似于: 我将参数设置为列表或数组或其他内容: 它将导致此查询发送到sql服务器: 如果该解决方案也可以与字符串一起使用,则执行以下查询会更好: 变得: 我相信这是一个简单的问题,但是“ IN”并不是搜索网络的好关键字。 请回答如何在IDE中配置参数,查询以及如何传递参数

  • 问题内容: 如何指定参数为表名? 问题答案: 你不能 相反,您需要将其作为VARCHAR2字符串传递,然后使用动态SQL: 阅读有关Dynamic SQL的信息, 并注意如果不正确地使用它会带来的问题,例如性能,可伸缩性和安全性较差。

  • 问题内容: 我有一个存储过程,它将列名和表名作为参数。 此过程给我一个错误: 必须声明标量变量@TableName 尽管我已经在顶部声明了它。 问题答案: 使用动态SQL:

  • 问题内容: 我有3类调用,和。 在我的课程中,我想要一个这样的方法: 因此,例如,我想: 如何将类名作为参数,并基于该类名从类名创建适当的对象? 问题答案: 使用反射是可能的。这里是给定的className(作为字符串传递)。此类将在内存中搜索(应该已经加载)。 作为字符串传递时要实例化的类的名称应 完全限定

  • 我正试图将dataframe列作为参数传递 但是得到错误 :33:错误:类型不匹配; 找到:org.apache.spark.sql.column 必需:int val df_new=df.withcolumn(“age_category”,ageclassification.agecategory(df(“age”))