2

我有一个包含 700 万条记录的表,我想将其缩减到 10k 以供开发人员使用。我尝试删除,但整个世界几乎被事务日志大小压倒,所以我截断了表。

现在我希望将原始表中的 10k 条记录插入到我的开发表中,但它有一个标识列和许多其他列,所以我想我会尝试 SSIS(通过向导),它处理身份很好,但我没有地方编辑查询。于是我赶紧做了一个带top子句的视图,把源的RowSet属性改成了视图。现在一切都失败了,因为什么都看不到视图,尽管我从我的 create view 语句中复制并粘贴了视图名称,但第二次失败了,因为视图确实存在。

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

4

5 回答 5

1

确实没有必要使用 SSIS 来执行此操作。您应该能够使用 SQL 插入记录。首先,您需要将 IDENTITY_INSERT 设置为 on。然后,您应该能够执行以下操作:

SET IDENTITY_INSERT db.schema.dev_table ON

插入到 dev_table SELECT TOP (10000) * FROM prod_table

于 2008-12-31T04:47:35.960 回答
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
于 2009-01-01T11:52:49.813 回答
1

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

于 2011-08-01T14:10:41.287 回答
0

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

于 2008-12-02T20:21:45.343 回答
0

您是否使用视图的完全限定名称?坐席的所有者与默认所有者不同吗?打开数据源并预览数据以确保所有数据都已连接。

于 2008-12-26T22:32:37.013 回答