вставить данные в приращениях - PullRequest
1 голос
/ 15 сентября 2009

Кто-нибудь знает, как вставить данные в таблицу с шагом около 1000? У меня есть таблица с тысячами записей, которые я хочу вставить в идентичную таблицу на другом сервере.

Ответы [ 7 ]

1 голос
/ 15 сентября 2009

Если таблица имеет первичный ключ

Declare @Start Integer Set @Start = 1
Decalre @End Integer Set @End = 1000
Declare @PKs table 
     (rowNo Integer identity Primary Key Not Null,
      PK Integer Not Null)
Insert @Pks(PK)
Select PrimaryKeyColumn
Form SourceTable
Where [Criteria to select rows you want]

While Exists(Select * From @PKs)
   Begin
      Begin Transaction
      Insert DestTable([ColumnList])
      Select [ColumnList]
      From SourceTable S
         Join @Pks p 
            On p.PK = s.PrimaryKeyColumn
      Where p.rowNo Between @Start and @End
      Commit Transaction
      -- ----------------------------------
      Delete @PKs where rowNo Between @Start and @End
      Set @Start = @End + 1
      Set @End = @Start + 999
   End
1 голос
/ 15 сентября 2009

Службы SSIS и большинство инструментов массового копирования (включая bcp) будут работать в режиме, позволяющем вставку в пакетном режиме. Учитывая, что вы переносите его на другой сервер, вы, возможно, захотите использовать инструмент массовой загрузки для этого в любом случае.

1 голос
/ 15 сентября 2009

В зависимости от версии вы можете использовать SSIS (2005/2008) или DTS (2000/7) или, если вам удобна командная строка, то BCP, или если вы являетесь администратором, и это одноразовый снимок AND опять же, в зависимости от версии, Enterprise Manager имеет интерфейсы запросов, которые, несомненно, позволят вам писать SQL (INSERT INTO ...) или SELECT * FROM ..., но не зная версию или цель, сложно определиться ..

0 голосов
/ 15 сентября 2009

Я задал похожий вопрос, и предложенный мастер импорта / экспорта сработал для меня. Было очень быстро (за несколько секунд) вставить тысячи записей из одной базы данных на одном компьютере в другой на другом компьютере.

0 голосов
/ 15 сентября 2009

вам нужно изучить атрибут sqlbulkcopy.batchsize

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.batchsize.aspx

0 голосов
/ 15 сентября 2009

Вы хотите переместить данные из одной таблицы в другую? Попробуйте утилита BCP .

http://msdn.microsoft.com/en-us/library/aa174646(SQL.80).aspx 

Отлично работает с огромным количеством данных.

0 голосов
/ 15 сентября 2009

SELECT ... LIMIT n OFFSET m; это стандартный способ извлечения огромных объемов данных небольшими порциями. Но, читая ваш вопрос, кажется, что вы пытаетесь реплицировать данные между двумя серверами баз данных. Может быть, вам следует проверить, есть ли у движка БД поддержка репликации.

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