如果我正確理解您的問題,您需要列出給定經理和員工單位組合的職位名稱。如果是這種情況,您需要一個存儲過程,以逗號分隔值的形式給出作業名稱列表。
在我看來,兩個查找轉換任務似乎是矯枉過正。
根據問題中提供的數據,部分創建並填充表格提供了示例數據。
創建以下存儲過程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在採樣數據。
截圖#2示出了用於兩個不同的參數集的存儲過程輸出。
如果我有一個SSIS包使用此,我將使用執行SQL任務獲得不同MANAGER_NAME和Emp_Unit組合列表,將填充結果集爲數據類型對象的SSIS包變量。
然後,我將使用Foreach loop container
和Foreach ADO enumerator
來循環顯示對象變量。在Foreach循環容器中,我將放置一個Data Flow Task
。在數據流任務中,我將放置一個將使用存儲過程作爲源的OLE DB Source
。對於循環遍歷的每個Manager_Name和Emp_Unit組合,這些值將作爲參數傳遞給OLE DB Source以獲取作業名稱值。
希望有所幫助。
創建和填充表格:此結構基於問題中提供的數據。
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');