Выберите с помощью переменной процедуры - PullRequest
0 голосов
/ 09 апреля 2020

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

У меня есть эта хранимая процедура:

ALTER PROCEDURE [dbo].[spRelacaoVendas]
    @usuario nvarchar(60) = NULL,
    @dataEmissao datetime,
    @dataSaida datetime
AS
BEGIN
    SELECT 
        NF.ID AS ID, NF.NaturezaOperacao AS Natureza, 
        NF.DataEmissao AS Data, NF.ValorTotal AS ValorTotal
    FROM
        NotaFiscal NF 
    INNER JOIN
        Venda V ON NF.ID_Venda = V.ID 
    INNER JOIN
        Usuario U ON V.ID_UsuarioComissao1 = U.ID
    WHERE
        ((U.Descricao = @usuario) OR (@usuario IS NULL)) AND
        (NF.DataEmissao >= @dataEmissao AND NF.DataSaida <= @dataSaida)
END

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

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Вы можете сохранить результат во временную таблицу, а затем делать с ней что угодно:

SELECT NF.ID AS ID, NF.NaturezaOperacao AS Natureza, NF.DataEmissao AS Data, NF.ValorTotal AS ValorTotal
INTO #Nota
. . .;
1 голос
/ 09 апреля 2020

Мне кажется, я правильно понимаю.

ALTER PROCEDURE [dbo].[spRelacaoVendas]
    @usuario nvarchar(60) = NULL,
    @dataEmissao datetime,
    @dataSaida datetime
AS
BEGIN
    select
        *
    FROM
        (SELECT NF.ID AS ID, NF.NaturezaOperacao AS Natureza, NF.DataEmissao AS Data, NF.ValorTotal AS ValorTotal
        FROM NotaFiscal NF INNER JOIN
            Venda V
        ON NF.ID_Venda = V.ID INNER JOIN
            Usuario U 
        ON V.ID_UsuarioComissao1 = U.ID
        WHERE
            ((U.Descricao = @usuario) OR (@usuario IS NULL)) AND
            (NF.DataEmissao >= @dataEmissao AND NF.DataSaida <= @dataSaida)) temp
END

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

0 голосов
/ 09 апреля 2020

Да, если он инкапсулирован, чтобы избежать определенных ошибок и прост в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...