问题是我有一个包含4列的表。我有两个搜索框。
字段
FName
LName
Age
School
文字框
FName
School
如果用户插入了两个值,我想使用这两个值来获取交叉。如果只存在一个值,我希望使用该值获取数据。我想过在应用程序中没有处理它,而是使用存储过程。 我想过在存储过程中使用IF ELSE或者有子查询。但不是一个可靠的解决方案我需要一些指导来思考一种可能的方法。提前谢谢。
这是我尝试过的。这只是我需要将其嵌入到存储过程中的查询
SELECT * FROM STUDENT WHERE FNname like '%TestFName%'
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';
如果'TestSchool'变为空,则会获取完整填充第一个查询的所有记录。
如果两个值都缺失,则返回整个表格。
如果两个值都存在,则返回特定的数据元组。
答案 0 :(得分:2)
很确定它就像这一样简单。
SELECT *
FROM STUDENT
WHERE FNname like '%TestFName%'
AND School LIKE '%TestSchool%';
如果使用' AND'而不是' OR'它符合所有给定的条件
答案 1 :(得分:1)
SELECT *
FROM YourTable
WHERE (FName = @Fname OR @Fname = '')
AND (School = @School OR @School ='')
答案 2 :(得分:0)
以下是我为自己的问题提出的答案。
SELECT * FROM STUDENT WHERE FNname like '%TestFName%'
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';
在这里,如果'TestFName'变为null,它将获取完全填充第二个查询的所有记录。
如果'TestSchool'变为空,则会获取完整填充第一个查询的所有记录。
如果两个值都缺失,则返回整个表格。
如果两个值都存在,则返回特定的数据元组。
谢谢。如果有比这更好的方法,请启发我们。
答案 3 :(得分:0)
您可以使用:
SELECT * FROM STUDENT WHERE isnull(FNname, '') like '%' + isnull(@FNname, '') + '%'
and isnull(School, '') like '%' + isnull(@School, '') + '%'
在存储过程中使用参数@FNname
和@School
,并在其中使用上述查询。