我必须设计一个解决方案,帮助我从1个主表中将数据加载到4个表中。
该功能或包应该做的所有事情如下:
每次运行程序时,此函数都会清除4个表并再次执行上述过程,主表和目标表的名称将始终相同。
例如,如果主表有4200条记录,那么:
任何人都可以帮助我吗?
答案 0 :(得分:0)
这是一种非常简单的方法。可能有更快的方法。将[TABLE]替换为表的名称,将[ID]替换为表中唯一列的名称。
DECLARE @count int = 0;
DECLARE @numRecsPerTable int = 0;
SELECT @count = COUNT(*) FROM [TABLE]
SELECT @numRecsPerTable = @count / 4
SELECT TOP (@numRecsPerTable) *
INTO temp_1
FROM [TABLE]
SELECT TOP (@numRecsPerTable) *
INTO temp_2
FROM [TABLE]
WHERE [ID] NOT IN (SELECT TOP (@numRecsPerTable) [ID] FROM [TABLE])
SELECT TOP (@numRecsPerTable) *
INTO temp_3
FROM [TABLE]
WHERE [ID] NOT IN (SELECT TOP (@numRecsPerTable * 2) [ID] FROM [TABLE])
SELECT *
INTO temp_4
FROM [TABLE]
WHERE [ID] NOT IN (SELECT TOP (@numRecsPerTable * 3) [ID] FROM [TABLE])
注意:recs / 4的剩余部分将在第4个表中。
答案 1 :(得分:0)
SSIS的实施类似于史蒂夫的回答。
第一个区别是,我们将使用模运算符%
而不是除法,它在除法后生成余数。在这个例子中,我使用%4
,这意味着我将有0,1,2和3的值。四个“桶”的数据。为了给模数运算符一些工作,我使用ROW_NUMBER
函数生成一个任意单调递增的数字序列。
查询看起来像
SELECT
T.*
, (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) % 4 AS bucketNumber
FROM
sys.all_columns AS T;
我将数据路由到条件分割组件。在这里,您可以定义布尔表达式并将它们与命名输出相关联。我将我的定义为Bucket0,Bucket1,Bucket2,Bucket3以及bucketNumber==0
使用的表达式...
我现在有4个连接器来自我的条件分割,并将它们连接到表Bucket0到Bucket3。