Вставьте фиксированное количество строк 2000 за раз в sql server

Я хочу вставить, скажем, 50 000 записей в базу данных sql server 2000 за раз. Как этого добиться?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
3 740
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы имеете в виду какой-то тест?

declare @index integer
set @index = 0
while @index < 50000
begin
   insert into table
   values (x,y,z)
   set @index = @index + 1
end

Но я думаю, вы не это имеете в виду.

Если вы имеете в виду лучший способ сделать объемную вставку, используйте BULK INSERT или что-то вроде bcp.

Не совсем. 50 000 строк, но 2000 за раз.

Malik Daud Ahmad Khokhar 25.09.2008 18:35

Вы вставляете из другой базы данных / таблицы программно или из плоского файла?

Из внешнего источника данных можно использовать bcp для импорта данных. Ключ -b позволяет указать размер пакета.

Ответ принят как подходящий

Вы можете использовать предложение SELECT TOP: в MSSQL 2005 оно было расширено, позволяя использовать переменную для указания количества записей (более старая версия допускала только числовую константу)

Вы можете попробовать что-то вроде этого: (не проверено, потому что в данный момент у меня нет доступа к MSSQL2005)

begin
declare @n int, @rows int

    select @rows = count(*) from sourcetable

    select @n=0

    while @n < @rows
    begin

        insert into desttable
        select top 2000 * 
        from sourcetable
        where id_sourcetable not in (select top (@n) id_sourcetable 
                    from sourcetable 
                    order by id_sourcetable)
        order by id_sourcetable

        select @n=@n+2000
    end
end

Да, я сделал это примерно так. Но вместо того, чтобы использовать NOT IN, я использовал NOT EXISTS, который должен обеспечить лучшую производительность.

Malik Daud Ahmad Khokhar 25.09.2008 20:03

объявить @rows как int установить @rows = 1 а @rows> 0

начинать

insert mytable (field1, field2, field3)
select   top 2000 pa.field1, pa.field2, pa.field3 
from table1 pa (nolock) 
left join mytable ta (nolock)on ta.field2 = pa.feild2
    and ta.field3 = pa.field3 and ta.field1 = pa.field1
where ta.field1 is null
order by pa.field1

установить @rows = @@ rowcount

конец

Это код, который мы в настоящее время используем в производственной среде в SQL Server 2000 с измененными именами таблиц и полей.

С SQL 2000 я бы, вероятно, полагался на DTS, чтобы сделать это в зависимости от того, где были расположены данные. Вы можете конкретно указать DTS, что использовать для размера пакетной фиксации. В противном случае подойдет модифицированная версия пакетного решения SQL 2005. Я не думаю, что вы можете использовать TOP с переменной в SQL 2000.

Подтверждаю, использование переменной было добавлено в SQL2005

Giacomo Degli Esposti 26.09.2008 03:41

Другие вопросы по теме