INSERT INTO SELECT - большое количество записей - PullRequest
5 голосов
/ 30 марта 2012

Я хочу вставить записи в TempTable. Примерно так:

insert into ##tempT
SELECT * FROM MyTable 

MyTable содержит большое количество записей, поэтому «вставка в» занимает много времени.

Если я попытаюсь запустить:

SELECT COUNT(*) FROM ##tempT

возвращает всегда «0», пока все записи из «MyTable» не будут вставлены командой INSERT INTO.

Как я могу получить счетчик прогресса, который подскажет мне, сколько записей в ## tempT?

Мне нужно обновить значение индикатора выполнения во время выполнения команды SQL.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 30 марта 2012

попробуй

set transaction isolation level read uncommitted
SELECT COUNT(*) FROM ##tempT
1 голос
/ 30 марта 2012

Используйте хранимую процедуру и ОБЪЯВЛЯЙТЕ переменную COUNT и обрабатывайте ее как переменную цикла, и каждый раз, когда вставка выполняется, увеличивайте COUNT на 1 и продолжайте печатать ее, используя другой запрос всякий раз, когда вы хотите узнать количество. Или верните это отсчитайте от процедуры и прочитайте ее в своей программе для обновления индикатора выполнения. :)

1 голос
/ 30 марта 2012

Вы можете разделить ваш запрос.

x = number of records in MyTable / 100
i = 0

do until we're done
    queryString = "insert into ##tempT "
    queryString += "select top " + x " + " * FROM MyTable "
    queryString += "where RecordNumber > " + i

    Execute queryString
    Update Progress Bar
    i = i + x
loop

Вы заметите, что вам нужно какое-то поле RecordNumber, чтобы сделать эту работу, хотяСуществуют различные способы поиска, которые вы можете искать.

...