У меня есть хранимая процедура, которая запрашивает некоторые записи сотрудников, основываясь на том, что отправил пользователь.
В пользовательском интерфейсе пользователь вводит несколько точек данных, таких как адреса электронной почты, идентификаторы пользователей или имена сотрудников.Эта хранимая процедура проверяет, какой тип данных они предоставляют, и затем ищет в этом поле записи в базе данных.
Входные данные для хранимой процедуры:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<dataPoints>
<dataPoint>
<order>0</order>
<value>Jim Bob</value>
</dataPoint>
<dataPoint>
<order>1</order>
<value>Sally Jones</value>
</dataPoint>
</dataPoints>
</data>
</root>
Запрос:
@dataType VARCHAR (20), @data XML
AS
BEGIN
SET NOCOUNT ON;
BEGIN
-- Create a temp table
DECLARE @dataSet TABLE (data VARCHAR(100), [order] INT);
INSERT INTO @dataSet( data , [order] )
SELECT
ParamValues.x1.value('value[1]', 'VARCHAR(100)') ,
ParamValues.x1.value('order[1]', 'INT')
FROM
@data.nodes('/root/data/dataPoints/dataPoint') AS ParamValues(x1)
-- Search Employees
SELECT
ec.FirstName, ec.PreferredName, ec.LastName,
ec.NTID, ec.QID,
ec.DepartmentName, ec.SegmentName,
ec.CenterName, ec.RoleName, ec.MarketName,
ec.IncentivePlanName,
ec.CostCenterID,
ec.SupFirstName, ec.SupPreferredName, ec.SupLastName,
ec.SiloName,
ec.AreaName,
ec.PersonnelID,
d.[order]
FROM
Resources.emp.EmployeeComplete AS ec
INNER JOIN
@dataset AS d ON d.data = CASE
WHEN @dataType = 'NTID' THEN ec.ntid
WHEN @dataType = 'QID' THEN ec.QID
WHEN @dataType = 'Emp ID' THEN ec.EmpID
WHEN @dataType = 'Email Address' THEN ec.Email
WHEN @dataType = 'Personnel ID' OR @dataType = 'Sap ID' THEN ec.PersonnelID
--WHEN @dataType = 'Name' THEN (
-- (ec.FirstName + ' ' + ec.LastName)
-- OR (ec.PreferredName + ' ' + ec.LastName)
-- OR (ec.LastName + ', ' + ec.FirstName)
-- OR (ec.LastName + ', ' + ec.PreferredName
-- )
END
FOR XML PATH ('employees'), ELEMENTS, TYPE, ROOT ('root');
Короче говоря, я беру несколько найденных точек данных и добавляю их в строку XML для передачи в хранимую процедуру.Когда они приходят, я помещаю их во временную таблицу, чтобы я мог присоединиться к ней со своими основными записями сотрудников.
Проблема / вопрос:
Вы увидите, что у меня есть закомментированный код вмой пример, и это где моя проблема.В моей базе данных есть три поля имени.First Name
, Preferred Name
, Last Name
.
Мне необходимо проверить, что предоставил пользователь, и найти сотрудников на основе введенной им комбинации.Все, что пользователь выбирает в пользовательском интерфейсе, это то, что он предоставляет имя, но не формат, в котором оно находится.
По этой причине мне нужно проверить, могу ли я найти записи в паре разных форматов.
В этом случае проблема заключается в том, что я не могу присоединиться к своему набору данных, используя условия OR
в выражении CASE
.
Если @dataType = 'Name'
, мне нужно иметь возможность присоединиться к своемувременная таблица на пару различных комбинационных возможностей.
Единственное, о чем мы узнаем, это то, что они не могут смешиваться и сочетаться.Это означает, что они не могут FirstName LastName
выполнить поиск LastName FirstName
.
У меня возникли проблемы с объяснением этого, поэтому, пожалуйста, дайте мне знать, если мне нужно как-то уточнить.