用户有三个文本框名称,编号,电子邮件。用户可以在三个文本框中输入详细信息,也可以是两个或一个基于输入的数据有一个表'tblSample'
。 ' tblSample'
有Name,Number,Email,Adress,Contact Number
。
例如,如果用户仅输入名称为' Sai Bharath'我应该显示表'tblSample' Where Name='Sai Bharath'
中的所有详细信息。就像那个用户可以输入两个文本框或三个文本框一样,最好和最简单的方法是什么?
答案 0 :(得分:0)
使用下面的代码是获得结果的最简单方法:
SELECT * FROM #tblSample
WHERE ( @name <> '' AND Name = @Name ) OR
( @number <> 0 AND Number = @number ) OR
( @email <> '' AND Email= @email)
答案 1 :(得分:0)
您可以在SQL Server中使用use COALESCE()
函数。您不需要在语句中使用IF- Else
或CASE
。以下是使用COALESCE
函数的方法。
SELECT * FROM tblSample where Name= COALESCE(NULLIF(@Name, ''), Name) and Address= COALESCE(NULLIF(@Address, ''), Address) and Email= COALESCE(NULLIF(@Email, ''), Email) and [ContactNumber=
COALESCE(NULLIF(@ContactNumber, ''), ContactNumber)
SQL中的COALESCE
函数返回其参数中的第一个非NULL表达式。例如,如果@Name等于null,则函数将返回Name,这将导致where语句中的Name = Name,如1 = 1,表示条件始终为true。
答案 2 :(得分:0)
我们可以检查条件是否只有变量/参数有值,否则我们可以通过检查null返回true,但如果没有任何变量有值,它将返回所有记录。如果我们有以下条件,我们可以通过添加强制变量条件来避免这种情况:
CREATE TABLE #tblSample(NAME VARCHAR(50),Number INT,Email VARCHAR(50))
INSERT INTO #tblSample VALUES
('Tom', 001122, 'tom@test.com'),
('Usy', 001123, 'usy@test.com'),
('Nuse', 001124, 'nuse@test.com'),
('Tom', NULL, 'tom@test.com')
DECLARE @name VARCHAR(50) = 'Tom', @number INT, @email VARCHAR(50)
SELECT *
FROM #tblSample
WHERE 1 = 1
AND (@name IS NULL OR NAME = @name)
AND (@number IS NULL OR number = @number)
AND (@email IS NULL OR email = @email)
输出:
NAME Number Email
Tom 1122 tom@test.com
Tom NULL tom@test.com
答案 3 :(得分:0)
由于您正在谈论文本框,我想您有某种服务层可以从数据层调用您的过程。一种方法是使用Entity Framework和LINQ2SQL来生成过滤方案所需的最小查询。
一种可能的方法:
<% if params[:type] == "switch" %>
var obj = $('.<%= params[:name] %> a:not(.label) #myonoffswitch:checkbox');
<% if params[params[:name]] %>
obj.prop('checked', false);
<% else %>
obj.prop('checked', true);
<% end %>
<% elsif params[:type] == "checkbox" %>
<% if params[params[:name]] %>
$('.<%= params[:name] %> a:not(.label)').remove();
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=true&type=checkbox'><i class='icon ion-android-checkbox-outline-blank' tabindex='0'></i></a>");
$('.<%= params[:name] %> a:not(.label) i').focus();
<% else %>
$('.<%= params[:name] %> a:not(.label)').remove();
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=false&type=checkbox'><i class='icon ion-android-checkbox' tabindex='0'></i></a>");
$('.<%= params[:name] %> a:not(.label) i').focus();
<% end %>
<% end %>
LINQ2SQL功能非常强大,如果需要,可以允许部分匹配(包含)。
存储过程解决方案可能会导致parameter sniffing。但是,对于大量人员,仍需要适当的索引来避免表扫描。