SQL Server存储过程电子邮件验证

时间:2013-03-11 00:58:13

标签: sql-server-2008 stored-procedures

我有一个ASP.net,它根据客户端的电子邮件地址从SQL Server 2008中的存储过程请求客户端的信息,直到@符号。由于客户经常在这个小型组织中3个月后更改,但电子邮件地址保持不变。

E.g。电子邮件地址为obois_in4@cegepoutaouais.qc.ca的客户在3-4个月后完成其合同,然后将该电子邮件地址分配给其他人。

现在,这是我的问题:我希望我的存储过程在他/她输入obois_in4并按下Search按钮后查找客户端信息。我不希望他们输入整个电子邮件的原因是因为它太长了,其次他们在打字时会犯错,但是输入obois_in4并不是什么大问题。

我编写了一个可以按名称搜索客户端的代码,但同样,客户端总是在3-4个月后更改,但电子邮件地址保持不变。

ALTER PROCEDURE [dbo].[sp_find_client_information] 
-- Add the parameters for the stored procedure here
@client_email varchar (50) = null
AS Declare @numOfRows int BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT @numOfRows = COUNT (*)
    From helpdesk_clients 
Where --change first name and 
    client_firstName = @client_email or client_lastName = @client_email;

begin
if (@numOfRows = 0)
    select @numOfRows;
else if (@numOfRows = 1)
select 
    client_id,
    client_firstName, 
    client_lastName, 
    client_work_email, 
    client_work_phone, 
    client_work_phone_ext, 
    client_office, 
    dept_nom,
    client_position 

from 
    helpdesk_clients join departments
    on 
    helpdesk_clients.dept_id = departments.dept_id 
    where client_firstName like '%'+@client_email+'%';
end
END

电子邮件地址始终以obois开头,后跟下划线_,然后是部门信息技术的名称in,然后是4之类的数字。这个案例。例如obois_in4@cegepoutaouais.qc.ca

1 个答案:

答案 0 :(得分:0)

我很惊讶甚至没有人打扰这个。最佳解决方案是使用Substring()CharIndex()

使用SUBSTRING ( expression ,start , length ),我们可以从字符串中的位置开始截断字符串,直到字符串中的指定位置。使用CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] ),我们可以找到给定字符串中字符的位置。

substring (work_email, 1, CHARINDEX('@', work_email)-1) = @work_email确保参数不必像shawn.smith@cegepoutaouais.qc.ca,并且客户输入完整的电子邮件(例如shawn.smith@cegepoutaouais.qc.ca)会非常麻烦,他只需要要输入shwan.smith,脚本将在shawn.smith中搜索shawn.smith@cegepoutaouais.qc.ca,直至@

e.g。

在存储过程中,假设@work_email是参数,它的值是'shawn.smith'

select 
client_id,
client_firstName, 
client_lastName, 
client_work_email, 
client_work_phone, 
client_work_phone_ext, 
client_office, 
dept_nom,
client_position 
 from 
helpdesk_clients join departments
on 
helpdesk_clients.dept_id = departments.dept_id 
where  substring (work_email, 1, CHARINDEX('@', work_email)-1) = @work_email;

将返回Select声明中提到的所有详细信息。