我有一个包含2个字段的学生表:
Name: nvarchar(256)
Age: int
用户将使用WinForm应用程序输入名称和年龄进行搜索。
我的问题是如何编写像这样的SQL。
P / S:我使用SQL Server 2005。
请帮帮我。感谢。
答案 0 :(得分:3)
一种方法是使参数可以为空并使用这种模式:
Create Procedure MyTest
(
@param1 int = NULL,
@param2 varchar = NULL
)
AS
BEGIN
SELECT Blah...
FROM Table
WHERE
((@param1 IS NULL) OR (somecolumn = @param1)) AND
((@param2 IS NULL) OR (someothercolumn = @param2))
END
[注意:如果有很多参数,它可以有参数嗅探副作用......]
答案 1 :(得分:1)
select * from thetable
where (@name='' or [name]=@name) and (@age=0 or age=@age)
但是,上面的查询强制进行表扫描。为了获得更好的性能和更复杂的场景(我猜你简化了原帖中的问题),请考虑使用动态sql。顺便说一句,Linq to SQL可以帮助您轻松构建动态SQL,如下所示:
IQueryable<Person> persons = db.Persons;
if (!string.IsNullOrEmpty(name)) persons = persons.Where(p=>p.Name==name);
if (age != 0) persons = persons.Where(p=>p.Age=age);
答案 2 :(得分:0)
我会使用动态SQL,根据输入使用可变数量的术语构建WHERE
子句。
我最近回答了类似案件的问题。请参阅以下示例的答案:
这些问题与PHP有关,但该技术可以适应任何编程语言。