Как ограничить количество записей для обработки в пакете служб SSIS? - PullRequest
2 голосов
/ 02 декабря 2008

У меня есть таблица с 7M записями, которую я хочу сократить до 10k для dev. Я попытался удалить, но размер журнала транзакций был почти переселен, поэтому я обрезал таблицу.

Теперь я хочу вставить 10 тыс. Записей из исходной таблицы в мою таблицу разработчиков, но у нее есть столбец идентификаторов и множество других столбцов, поэтому я решил попробовать SSIS (с помощью мастера), который хорошо обрабатывает личность, но не дает мне места для редактирования запроса. Поэтому я быстро сделал представление с верхним предложением и изменил свойство RowSet источника на представление. Теперь все терпит неудачу, потому что ничто не видит представление, хотя я скопировал и вставил имя представления из моего оператора создания представления, который терпит неудачу во второй раз, потому что, вот, представление фактически существует.

Определяет ли SSIS, какие объекты БД используются при создании пакета, что исключило бы новое представление, и если да, как я могу обновить это?

Ответы [ 5 ]

1 голос
/ 01 августа 2011

Вы могли бы также использовать элемент управления выборкой строк, чтобы извлечь случайное количество записей из общих данных, а не просто получить первые 10000 строк. Это даст лучшую выборку для использования при разработке / тестировании, поскольку вы будете разрабатывать не только 10000 самых старых (если ваш дистрибутив похож на большинство таблиц, которые я видел), а вместо этого выборку по всему файлу.

1 голос
/ 01 января 2009

Эд прав, SSIS для этой задачи излишен - тем более, что вы вставляете только 10К записей.

Если предположить, что схема таблицы DEV идентична рабочей, сценарий, отображаемый Ed, будет работать нормально.

Если схема отличается, вы можете указать столбцы, в частности, включая столбец идентификаторов (не забывая впоследствии отключить вставку идентификатора). Например:

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
1 голос
/ 31 декабря 2008

Нет необходимости использовать SSIS для этого. Вы должны быть в состоянии вставить записи, используя SQL. Сначала вам нужно включить IDENTITY_INSERT. Тогда вы сможете выполнить что-то вроде этого:

SET IDENTITY_INSERT db.schema.dev_table ON

INSERT INTO dev_table SELECT TOP (10000) * FROM prod_table

0 голосов
/ 27 декабря 2008

Используете ли вы полное имя для представления? Есть ли у другого владельца, чем владелец по умолчанию? Откройте источник данных и выполните предварительный просмотр данных, чтобы убедиться, что все они подключены.

0 голосов
/ 02 декабря 2008

Вы пытались закрыть и снова открыть пакет? Я не ожидал бы, что вы должны будете сделать это все же. Первой моей мыслью было бы то, что это проблема безопасности - вы не предоставили себе право выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...