0

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

例如,具有电子邮件地址的客户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

4

1 回答 1

0

我很惊讶没有人费心去研究这个。最好的解决方案是使用Substring()CharIndex()

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

substring (work_email, 1, CHARINDEX('@', work_email)-1) = @work_email确保参数不必是 like shawn.smith@cegepoutaouais.qc.ca,而且客户输入他的完整电子邮件 like 是一个很大的麻烦shawn.smith@cegepoutaouais.qc.ca,他只需要输入,脚本将shwan.smith搜索shawn.smith直到签名。shawn.smith@cegepoutaouais.qc.ca@

例如

在存储过程中,假设@work_emailis 参数并且它的值是 '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声明中提到的所有细节。

于 2013-06-25T20:09:50.873 回答