如何限制SSIS包中要处理的记录数?

时间:2008-12-02 19:15:46

标签: sql-server ssis

我有一个包含7M记录的表格,我希望将dev减少到10k。我尝试了删除,但整个世界几乎被事务日志大小所压倒,所以我截断了表。

现在我希望将原始表中的10k记录插入到我的开发表中,但是它有一个标识列,还有很多很多其他列,所以我想我会尝试SSIS(通过向导),它很好地处理了身份,但没有给我编辑查询的地方。所以我很快用top子句创建了一个视图,并将源的RowSet属性更改为视图。现在一切都失败了,因为没有人看到视图,虽然我从我的创建视图语句中复制并粘贴了视图名称,但是第二次失败,因为视图确实存在。

SSIS是否定义创建包时使用的DB对象,这将排除新视图,如果是,我该如何刷新?

5 个答案:

答案 0 :(得分:1)

确实没有必要使用SSIS来做到这一点。您应该能够使用SQL插入记录。首先,您需要将IDENTITY_INSERT设置为on。然后,你应该能够执行这样的事情:

SET IDENTITY_INSERT db.schema.dev_table ON

INSERT INTO dev_table SELECT TOP(10000)* FROM prod_table

答案 1 :(得分:1)

Ed是正确的,SSIS对于此任务来说太过分了 - 特别是当您只插入10K记录时。

假设DEV表的架构与生产相同,则显示的Ed脚本将正常工作。

如果架构不同,您可以专门指定列 - 包括标识列(记住以后将标识插入设置为OFF)。例如:

SET IDENTITY_INSERT dbo.dev_table ON
INSERT INTO dev_table (Id, Col1,Col2,Col3,Col4)
SELECT TOP 10000 Id, Col1, Col2, Col3, Col4 FROM prod_table
SET IDENTITY_INSERT dbo.dev_table OFF

答案 2 :(得分:1)

您还可以使用行采样控件从总体数据中提取随机数量的记录,而不是仅获取前10000行。这将为开发/测试提供更好的采样,因为您不会仅针对最老的10000个(如果您的分布与我见过的大多数表格)记录一起开发,而是从整个文件中进行采样。

答案 3 :(得分:0)

您是否尝试关闭并重新打开包装?我不希望你必须这样做。我首先想到的是一个安全问题 - 你没有给自己选择它。

答案 4 :(得分:0)

您是否在视图中使用完全限定名称? Doe坐拥有与默认所有者不同的所有者?打开数据源并预览数据以确保它们全部连接起来。