Если я правильно понимаю ваш вопрос, вам нужен список названий должностей для данной комбинации менеджера и сотрудника.Если это так, вам нужна хранимая процедура, которая может дать список имен заданий в виде значения, разделенного запятыми.
На мой взгляд, две задачи преобразования поиска кажутся излишними.
На основе данных, представленных в вопросе, в разделе Создание и заполнение таблиц приведены примеры данных.
Создайте следующую хранимую процедуру dbo.GetManagerJobProfiles
, которая будет принимать Manager_Name
и Emp_Unit
в качестве входных параметров и выдаст список совпадающих имен заданий для заданных параметров в виде списка через запятую.Эта хранимая процедура использует предложение FOR XML для генерации значений через запятую.Так как запятая добавляется в начале, мы должны усечь первую запятую из списка.Следовательно, функция подстроки используется для выполнения этой работы, чтобы обеспечить более чистый вывод.
CREATE PROCEDURE dbo.GetManagerJobProfiles
(
@Manager_Name NVARCHAR(80)
, @Emp_Unit NVARCHAR(80)
)
AS
BEGIN
SET NOCOUNT ON;
SELECT SUBSTRING(
(
SELECT ', ' + J.Job_Name
FROM dbo.Managers M
LEFT OUTER JOIN dbo.Jobs J
ON M.Job_Profile_Id = J.Job_Profile_Id
WHERE M.Manager_Name = @Manager_Name
AND M.Emp_Unit = @Emp_Unit
FOR XML PATH ('')
)
, 3, 1000) AS Job_Name
END
GO
Снимок экрана # 1 показывает примеры данных в таблицах dbo.Managers и dbo.Jobs .
![Table data](https://i.stack.imgur.com/VJ4h6.png)
Снимок экрана # 2 показывает вывод хранимой процедуры для двух различных наборов параметров.
![Stored procedure output](https://i.stack.imgur.com/Cy0Qn.png)
Если мне придется использовать это в пакете служб SSIS, я получу список различных комбинаций Manager_Name и Emp_Unit с помощью задачи «Выполнение SQL» и заполню результирующий набор в переменной пакета служб SSIS типа данных Object.
Iбудет затем перебирать переменную объекта, используя Foreach loop container
с Foreach ADO enumerator
.В контейнере цикла Foreach я поместу Data Flow Task
.В задаче потока данных я поместу OLE DB Source
, который будет использовать хранимую процедуру в качестве источника.Для каждой циклической комбинации Manager_Name и Emp_Unit значения будут переданы в качестве параметров в источник OLE DB для получения значений имени задания.
Надеюсь, что это поможет.
Создать изаполнить таблицы : Эта структура основана на данных, представленных в вопросе.
CREATE TABLE [dbo].[Jobs](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Job_Profile_Id] [int] NOT NULL,
[Job_Name] [nvarchar](40) NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Managers](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Manager_Name] [nvarchar](80) NOT NULL,
[Emp_Unit] [nvarchar](80) NOT NULL,
[Job_Profile_Id] [int] NOT NULL,
CONSTRAINT [PK_Managers] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
INSERT INTO dbo.Managers (Manager_Name, Emp_Unit, Job_Profile_Id) VALUES
('AAA', 'SALES', 27),
('BBB', 'HR', 28),
('AAA', 'SALES', 29);
INSERT INTO dbo.Jobs(Job_Profile_Id, Job_Name) VALUES
(27, 'Jr. Salesman'),
(28, 'Sales Manager'),
(29, 'Sr. Salesman');