Хранимая процедура вызова SQL для каждой строки без использования курсора

Если у вас есть функция atan2 () в вашей математической библиотеке по выбору:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
143
задан Vadzim 29 November 2014 в 10:40
поделиться

3 ответа

Если вы этого не сделаете, что использовать курсор I думаю, вам придется делать это извне (получить таблицу, а затем запустить для каждого оператора и каждый раз вызывать sp) Это то же самое, что и использование курсора, но только вне SQL. Почему вы не используете курсор?

2
ответ дан 23 November 2019 в 22:35
поделиться

Для SQL Server 2005 и более поздних версий это можно сделать с помощью CROSS APPLY и функции с табличным значением.

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

6
ответ дан 23 November 2019 в 22:35
поделиться

Вы можете сделать что-то вроде этого: упорядочить таблицу, например, по идентификатору клиента (используя образец таблицы AdventureWorks Sales.Customer ), и перебрать этих клиентов с помощью цикла WHILE:

-- define the last customer ID handled
DECLARE @LastCustomerID INT
SET @LastCustomerID = 0

-- define the customer ID to be handled now
DECLARE @CustomerIDToHandle INT

-- select the next customer to handle    
SELECT TOP 1 @CustomerIDToHandle = CustomerID
FROM Sales.Customer
WHERE CustomerID > @LastCustomerID
ORDER BY CustomerID

-- as long as we have customers......    
WHILE @CustomerIDToHandle IS NOT NULL
BEGIN
    -- call your sproc

    -- set the last customer handled to the one we just handled
    SET @LastCustomerID = @CustomerIDToHandle
    SET @CustomerIDToHandle = NULL

    -- select the next customer to handle    
    SELECT TOP 1 @CustomerIDToHandle = CustomerID
    FROM Sales.Customer
    WHERE CustomerID > @LastCustomerID
    ORDER BY CustomerID
END

Это должно работать с любой таблицей, если вы можете определить какой-то ORDER BY для некоторого столбца.

39
ответ дан 23 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: