В моем случае единственным вариантом было удалить виртуальную машину и загрузить ее снова. Никакая переконфигурация адаптера только для хоста не помогла, я использовал другую адресацию DHCP. Virtual Box I обновлен до версии 4.3.4 и Genymotion до 2.0.2
9 из 10 раз можно сделать то, что Вы хотите без курсора или некоторое время цикла. Однако, если необходимо использовать один, я нашел, что циклы с условием продолжения имеют тенденцию быть быстрее.
Также, если Вы не хотите удалять или обновлять таблицу, можно использовать что-то вроде этого:
DECLARE @id [type]
SELECT @id = MIN([id]) FROM [table]
WHILE @id IS NOT NULL
BEGIN
EXEC [sproc] @id
SELECT @id = MIN([id]) FROM [table] WHERE [id] > @id
END
Да. Если у Вас есть столбец, можно использовать в таблице для маркировки тех обработанных, можно использовать, В ТО ВРЕМЯ КАК СУЩЕСТВУЕТ:
DECLARE @Id int
WHILE EXISTS(SELECT * FROM Table1 WHERE Processed='N')
BEGIN
SELECT Top 1 @Id = id from Table1 WHERE Procesed='N'
EXEC dbo.Sproc @Id
UPDATE Table1 SET Processed = 'Y' WHERE Id = @Id
END
Поочередно, выведите идентификаторы во временную таблицу или табличную переменную и удалите по окончании:
DECLARE @HoldTable table (Id int PRIMARY KEY)
DECLARE @Id int
INSERT INTO @HoldTable SELECT Id FROM Table1
WHILE EXISTS(SELECT * FROM @HoldTable)
BEGIN
SELECT @Id = id from @HoldTable
EXEC dbo.Sproc @Id
DELETE FROM @HoldTable where Id = @Id
END
Если возможный я записал бы вторую версию сохраненного proc, который читает из временной таблицы.
, Если это не возможно, чем, Вам, вероятно, не повезло.
Откровенно, если я должен был выполнить сохраненный proc для ряда данных вместо этого, если бы одна запись, для которой это было записано, я написал бы основанный на наборе код вместо того, чтобы использовать сохраненный proc. Это - единственный эффективный способ сделать это, если Вы собираетесь быть выполнением против большого набора данных. Вы могли пойти с часов, чтобы сделать вставку, которую сохраненный proc делает к секундам или даже миллисекундам. Не используйте основанную на записи обработку никогда, когда необходимо будет обработать ряд данных особенно не по глупой причине как повторное использование кода. Производительность превосходит повторное использование кода.
Если Вы только используете SQL Server 2005 или более новые, не заботьтесь о назад совместимости, и может преобразовать Ваш код, чтобы быть в Пользовательской Функции (а не сохраненный proc) затем, можно использовать новый оператор "CROSS APPLY", который действительно использует синтаксис, очень похожий на то, что Вы хотите. Я нашел здесь короткое введение (конечно, можно также считать BOLs и MSDN)
предположим, SP возвращает единственное значение, названное out_int, пример мог быть переписан как:
SELECT T.id, UDF.out_int
FROM
Table1 T
CROSS APPLY
dbo.fn_My_UDF(T.id) AS UDF
Это будет получать каждый "идентификатор" от Table1 и использовать его для вызова fn_My_UDF, результат которого появится в заключительном наборе результатов помимо исходного параметра.
варьируемая величина А "КРЕСТА ПРИМЕНЯЕТСЯ", является "ВНЕШНИМ, ПРИМЕНЯЮТСЯ". Они - эквиваленты "ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ" и "ОСТАВЛЕННЫЙ СОЕДИНЕНИЕ", но работу над присоединением к таблице и UDF (и вызов второго одновременно).
, Если Вы должны (согласно явному порядку босса с заостренными волосами) используют SPS insead, хорошо - неудача! Необходимо будет оставаться с курсорами или попытаться обмануть немного: измените код в UDFs и создайте SPS обертки :D.