Текстовое поле,в котором пользователь вводит имя, может быть именем или фамилией, а затем на экране отображаются данные записи.Логика хранимых процедур не работает
есть текстовое поле,в котором пользователь вводит имя, которое может быть именем, фамилией или и тем, и другим.Все это вводится в одно текстовое поле пользовательского ввода.Затем хранимая процедура sql должна искать имя(имя,фамилию) даже может быть несколько записей,где пользователь может выбрать конкретное имя из повторяющегося имени во всплывающем окне или простой таблице. У меня нет особых навыков работы с sql server.У меня возникли проблемы с правильной логикой.
Код до сих пор выглядит следующим образом-
create PROCEDURE [dbo].[getfullnamereturnTest] @NameSearch nvarchar(max) AS begin if exists (select * from testingtable where firstname='@NameSearch') begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.firstname,COUNT(*) as repitingnamesno from testingtable where testingtable.firstname ='@NameSearch' group by testingtable.firstname having count(testingtable.firstname)>1) subq ON testingtable.firstname = subq.firstname end else if exists (select * from testingtable where lastname='@NameSearch') begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.lastname,COUNT(*) as repitingnamesno from testingtable where testingtable.lastname ='@NameSearch' group by testingtable.lastname having count (testingtable.lastname)>1 ) subq ON testingtable.lastname = subq.lastname end else begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.firstname,testingtable.lastname,COUNT(*) as repitingnamesno from testingtable where testingtable.firstname+testingtable.lastname ='@NameSearch' group by testingtable.firstname,testingtable.lastname having count (testingtable.firstname+testingtable.lastname)>1 ) subq ON testingtable.firstname = subq.firstname AND testingtable.lastname = subq.lastname end end go
Поиск фамилии с помощью "Редди"
exec getfullnamereturnTest @NameSearch='reddy'
Хранимая процедура возвращает пустую таблицу.Даже если он состоит из нескольких записей по имени.Но когда я просто выполнил запрос без входного параметра, как показано ниже, и он работает нормально.
if exists (select * from testingtable where firstname='reddy') begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.firstname,COUNT(*) as repitingnamesno from testingtable where testingtable.firstname ='reddy' group by testingtable.firstname having count(testingtable.firstname)>1) subq ON testingtable.firstname = subq.firstname end else if exists (select * from testingtable where lastname='reddy') begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.lastname,COUNT(*) as repitingnamesno from testingtable where testingtable.lastname ='reddy' group by testingtable.lastname having count (testingtable.lastname)>1 ) subq ON testingtable.lastname = subq.lastname end else begin select distinct testingtable.firstname,testingtable.lastname,testingtable.country from testingtable inner join ( select testingtable.firstname,testingtable.lastname,COUNT(*) as repitingnamesno from testingtable where testingtable.firstname+testingtable.lastname ='reddy' group by testingtable.firstname,testingtable.lastname having count (testingtable.firstname+testingtable.lastname)>1 ) subq ON testingtable.firstname = subq.firstname AND testingtable.lastname = subq.lastname end
Он возвращает вывод, как показано ниже:
firstname lastname country amulya Chdary Uk amulya reddy BZ
Таблица состоит из следующих значений.
firstname lastname country sruthi reddy IND sruthi chlka US amulya Chdary Uk sruthi K AUS amulya reddy BZ avasya Koneru US sruthi reddy AUS amulya reddy BZ avasya Koneru US avasya koneru AUS
Табличные данные
CREATE TABLE [dbo].[testingtable]( [firstname] [nvarchar](50) NULL, [lastname] [nvarchar](50) NULL, [country] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO INSERT INTO testingtable (firstname, lastname, country) VALUES ('sruthi','reddy' , 'IND'), ('sruthi','chlka' , 'US'), ('amulya', 'reddy', 'BZ'), ('amulya', 'Chdary', 'Uk'), ('avasya', 'Koneru', 'US'), ('avasya', 'Koneru', 'AUS'), ('amulya', 'reddy', 'BZ'), ('avasya', 'Koneru', 'US'), ('sruthi','K' , 'AUS'), ('sruthi','reddy' , 'AUS');