【问题标题】:Selecting a approximate values by using stored procedure使用存储过程选择近似值
【发布时间】:2010-02-23 13:49:39
【问题描述】:

使用 SQL Server 2005 和 VB.Net

表1

ID Name Dept

001 Raja IT
002 Ravi CSE
003 Suns IT

存储过程

Create Procedure Selecttable1 As Select ID, Name, Dept from table1

我想用类似的条件执行存储过程

cmd = new sqlcommand("Exec SelectTable1 where id like  '" & idsearch.Text & "%' ", dbcon)
cmd.ExecuteNonQuery

idsearch.Text - 文本框输入值

当我尝试运行上述查询时,它显示错误。

如何执行带条件的存储过程?

需要查询帮助

【问题讨论】:

  • 吹毛求疵:这是一个 STORED 过程 - 不是一个存储过程....

标签: sql-server vb.net


【解决方案1】:

您似乎正在寻找运行带有参数的存储过程。

为此,存储过程需要使用参数创建,调用它的代码应该传入这些参数。

存储过程:

Create Procedure Selecttable1 
   @inID INT
As Select ID, Name, Dept from table1
WHERE ID = @inID

代码:

cmd = new SqlCommand("SelectTable1", dbcon)
cmd.Parameters.Add(new SqlParameter("@inID", idsearch.Text))

不要不要使用示例中的构造 ("Exec SelectTable1 where id like '" & idsearch.Text & "%' "),因为这是一个开放的 SQL Injection 漏洞。

您应该使用parameters,如上所述以避免这种情况。

【讨论】:

  • +1。我们当中只有一个人提到了 SQL 注入漏洞。干得好。
【解决方案2】:

我将创建第二个存储过程,它将“idsearch”作为参数,并将 LIKE 条件直接应用于基础查询。

例如

CREATE PROCEDURE MySproc2
    @IDSearch VARCHAR(100)
AS
BEGIN
   SELECT SomeField
   FROM YourTable
   WHERE AnotherField LIKE @IDSearch + '%'
END

【讨论】:

    【解决方案3】:

    这是来自http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx 的标准 SQL Sever ocumentation 的示例(不包含您的数据)

    CREATE PROCEDURE au_info2
       @lastname varchar(30) = 'D%',
       @firstname varchar(18) = '%'
    AS 
    SELECT au_lname, au_fname, title, pub_name
    FROM authors a INNER JOIN titleauthor ta
       ON a.au_id = ta.au_id INNER JOIN titles t
       ON t.title_id = ta.title_id INNER JOIN publishers p
       ON t.pub_id = p.pub_id
    WHERE au_fname LIKE @firstname
       AND au_lname LIKE @lastname
    GO
    

    您可以从我链接到的站点找到 SQL Server 所需的大部分文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2015-04-01
      • 2017-08-04
      • 1970-01-01
      • 2016-07-10
      • 2014-02-15
      • 2021-08-09
      相关资源
      最近更新 更多