SQL Server 2014: создать процедуру с выходным параметром курсора - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в этой хранимой процедуре. Мой вопрос связан с выходным параметром курсора.В чем разница между параметром вывода курсора и обычной хранимой процедурой, например, переменной или влияющей на результат или производительность запроса?

Я использую SQL Server 2014. При создании хранимой процедуры я использовал сочетание клавишalt + k, alt + x.в списке я выбрал хранимую процедуру после выбора хранимой процедуры, она просит выбрать тип хранимой процедуры:

  1. Создать базовый шаблон процедуры
  2. Создать процедуру с выходным параметром курсора
  3. Создать процедуру с выходным параметром.

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

CREATE PROCEDURE dbo.Sample_Procedure 
    @sample_procedure_cursor CURSOR VARYING OUTPUT
AS
    SET @sample_procedure_cursor = CURSOR FOR
        select 1
    OPEN @sample_procedure_cursor 
RETURN 0 

Я просто хочу понять, есть ли какие-либо другие выходные данные, которые я не вижу, используя ключевые слова "меняющиеся курсором выходные данные" вместо использования "@variable datatype;"

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Курсор в качестве вывода предназначен для инкапсуляции определения курсора.Это означает, что вы выполняете SP, чтобы получить курсор, который уже был инициализирован и связан с результирующим набором, который неизвестен вызывающей стороне, но вызывающая сторона будет использовать.

Это открывает потенциальную проблему, состоящую в том, что вызывающей стороне необходимо знать, в какие переменные необходимо преобразовать строку выборки, и, возможно, она может нарушить использование курсора, если выполняется неправильно.Этого не произойдет, если SP вернет набор результатов с SELECT или вставит во временную таблицу, созданную, например, вне.

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

0 голосов
/ 08 февраля 2019

Дипак, пожалуйста, обратитесь к примерам документации по ссылка

Если вы неоднократно используете один и тот же курсор в своих кодах SQL, вы можете один раз обернуть определение курсора в SP и обратиться кпозже.

Я копирую ниже пример кода

Сначала создайте процедуру

CREATE PROCEDURE dbo.uspCurrencyCursor   
    @CurrencyCursor CURSOR VARYING OUTPUT  
AS  
    SET NOCOUNT ON;  
    SET @CurrencyCursor = CURSOR  
    FORWARD_ONLY STATIC FOR  
      SELECT CurrencyCode, Name  
      FROM Sales.Currency;  
    OPEN @CurrencyCursor;  
GO

Затем используйте ее следующим образом

DECLARE @MyCursor CURSOR;  
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;  
WHILE (@@FETCH_STATUS = 0)  
BEGIN;  
     FETCH NEXT FROM @MyCursor;  
END;  
CLOSE @MyCursor;  
DEALLOCATE @MyCursor;  
GO
...