在SELECT命令的左侧使用SQL函数是否有效

本文关键字:SQL 函数 是否 有效 SELECT 命令 | 更新日期: 2023-09-27 17:59:56

我正在使用设计一个C#程序。NET和Windows窗体。有一次,我需要打开一个包含DataGridView对象和TextBox的表单。DataGridView对象将在TextBox上输入,并显示数据库中的实时匹配。

为了实现这一点,我一直在使用下面的简单SQL查询:

SqlCommand cmd = "SELECT name,document_no FROM clients WHERE LEFT(name, " + textboxname.Text.Len + ") = '" textboxname.Text + "'";

它目前有效,虽然我的数据库包含大约十几行,但它对大型(2k多个条目)数据库有效吗?

在SELECT命令的左侧使用SQL函数是否有效

您所采用的方法不会很有效-至少,如果名称列上有索引(如果没有这样的索引,那么无论您做什么,都会导致性能不佳)。通常,在WHERE子句中调用的任何函数(其中一个或多个参数是列)都会挫败查询优化器对这些列使用索引的任何尝试。

更好的是:

SELECT name,document_no FROM clients WHERE name LIKE 'yourtextboxtexthere%'

这将有很好的机会在名称上使用索引。

2k+个条目,是的,你可能还好。2M+个条目。我想说你不好。LEFT函数可能不会使用索引。请考虑改用"WHERE name LIKE " + txtboxname.Text + "%"

需要考虑的问题。

  1. Sql注入,您应该清除txtboxname。文本或使用参数化查询
  2. 索引通常与LIKE语句一起使用,只要"%"位于的开头或结尾陈述而非两者(ala"%sometext%")