Можно ли выполнить хранимую процедуру над набором без использования курсора?

Если вы используете только tsql SQL Server 2005 или новее, не sql-query заботитесь об обратной совместимости tsql и можете преобразовать свой mssql код в определяемую пользователем transact-sql функцию (а не в сохраненную sql-query процедуру), тогда вы можете transact-sql использовать новый "CROSS" APPLY sql », который использует синтаксис, очень transact-sql похожий на ваш. Я нашел here короткое sql-query вступление (конечно, вы также mssql можете прочитать BOL и MSDN)

Предположим, ваш sql-query SP возвращает одно значение ms-sql-server с именем out_int, ваш пример можно transact-sql переписать как:

SELECT T.id, UDF.out_int
FROM 
    Table1 T
CROSS APPLY
    dbo.fn_My_UDF(T.id) AS UDF

Это будет tsql извлекать каждый «идентификатор» из sql-syntax Table1 и использовать его ms-sql-server для вызова fn_My_UDF, результат stored-procedures которого появится в окончательном transact-sql наборе результатов помимо sql-statement исходного параметра.

Вариант ms-sql-server CROSS APPLY - OUTER APPLY. Они sql-statement являются эквивалентами INNER stored-procedure JOIN и LEFT JOIN, но работают sql-srever над объединением таблицы sql-select и UDF (и одновременным вызовом stored-procedure второго).

Если вы должны (по явному sql-query указанию остроконечного босса) использовать tsql SP, что ж - неудача! Вам sqlselect придется придерживаться курсоров tsql или попробовать немного обмануть: изменить sql-query код на UDF и создать SP-оболочки: D.

sql

sql-server

tsql

stored-procedures

2022-10-06T09:19:41+00:00
Вопросы с похожей тематикой, как у вопроса:

Можно ли выполнить хранимую процедуру над набором без использования курсора?