我正在嘗試將兩個源系統中的表拉到一個合并的目標服務器中。我們有多個業務單位駐留在不同的源系統上,并且大部分具有相同的表結構,但是其中一個源系統已升級到較新的版本,并且具有其他源沒有的一些列。
我現在將資料流任務設定為在 for each 回圈中運行,該回圈查找并回圈遍歷我的每個源。我需要根據源系統更改查詢以包含缺少的列。我希望我可以通過使用派生列來動態地做到這一點,如果有問題的列不存在,如果它確實存在,我希望包忽略派生列并繼續.
我也嘗試將我的查詢寫出到變數,但我無法弄清楚如何讓 DFT 根據源連接選擇特定的查詢變數。
編輯:下面的表比較示例:
--Updated Source
SELECT [ProductID]
,[ProductNumber]
,[ReorderPoint]
,[ListPrice]
,[SizeUnitMeasureCode]
,[WeightUnitMeasureCode]
,[Class]
,[Style]
,[ProductSubcategoryID]
,[ProductModelID]
,[ModifiedDate]
FROM [Sales].[Product];
--Outdated Source
SELECT [ProductID]
,[ProductNumber]
,[ReorderPoint]
,[ListPrice]
,[SizeUnitMeasureCode]
,[WeightUnitMeasureCode]
,[Class]
,[Style]
,NULL AS [ProductSubcategoryID]
,NULL AS [ProductModelID]
,[ModifiedDate]
FROM [Sales].[Product];
我希望能夠提取所有列,包括過時源中缺少的列。用 NULL AS 標注的列是有問題的缺失列。
uj5u.com熱心網友回復:
我不喜歡這個解決方案,但它可能有效。正如我所提到的,您可以構建一個動態陳述句,然后從中構建查詢。這很丑陋,但就像我說的,SSIS 期望一致的定義,所以如果你不能給出它,你必須跳過一些箍。
這也未經測驗,但希望能給你這個想法。
DECLARE @ColumnList table (OrdinalPosition int IDENTITY(1,1),
ColumnName sysname,
ColumnDatatype sysname);
--The following datatypes are completely guessed
INSERT INTO @ColumnList
VALUES(N'ProductID',N'int'),
(N'ProductNumber',N'int'),
(N'ReorderPoint',N'int'),
(N'ListPrice',N'decimal'),
(N'SizeUnitMeasureCode',N'decimal'); --You get the idea
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) NCHAR(10);
DECLARE @Delimiter nvarchar(20) = N',' @CRLF N' ';
SELECT @SQL = N'SELECT '
STRING_AGG(ISNULL(QUOTENAME(c.[name]),N'CONVERT(' QUOTENAME(CL.ColumnDatatype) N',NULL') N') AS ' QUOTENAME(CL.ColumnName),@Delimiter) WITHIN GROUP (ORDER BY CL.OrdinalPosition) @CRLF
N'FROM Sales.Product;'
FROM @ColumnList CL
LEFT JOIN sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
AND t.[name] = N'Product'
JOIN sys.schemas s ON t.schema_id = s.schema_id
AND s.[name] = N'dbo'
ON CL.ColumnName = c.[name];
--PRINT @SQL; --Your best friend
EXEC sys.sp_executesql @SQL;
您應該能夠使用它作為 SSIS 源的定義,并且它應該創建一個包含您想要的所有列的資料集,即使表沒有它。
uj5u.com熱心網友回復:
在 SSIS 中以半動態方式執行此操作的唯一方法是在資料流源查詢中使用運算式,當連接到缺少某些列的系統時,該運算式將列名替換為文字空值。或者給你一個資料流中的腳本源并替換代碼中缺失的列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332836.html
標籤:sql sql-server 查询语句 姐姐
下一篇:重寫查詢
