Podemos passar um parâmetro para uma exibição no Microsoft SQL Server?
Eu tentei create view
da seguinte maneira, mas não funciona:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
sql
sql-server
parameters
parameter-passing
views
arunachalam
fonte
fonte
Parameters are out of the discussion
muito ousada. CounterexampleRespostas:
Como já foi dito, você não pode.
Uma solução possível seria implementar uma função armazenada, como:
Isso permite que você o use como uma visualização normal, com:
fonte
Existem duas maneiras de conseguir o que você deseja, infelizmente, nem pode ser feito usando uma visualização.
Você pode criar uma função definida pelo usuário com valor de tabela que aceita o parâmetro desejado e retorna um resultado da consulta
Ou você pode fazer praticamente a mesma coisa, mas criar um procedimento armazenado em vez de uma função definida pelo usuário.
Por exemplo
o procedimento armazenado pareceria
Ou a função definida pelo usuário seria semelhante a
fonte
SELECT
facilmente: leia mais .Não, você não pode, como disse Mladen Prajdic. Pense em uma visualização como um "filtro estático" em uma tabela ou uma combinação de tabelas. Por exemplo: uma exibição pode combinar tabelas
Order
e,Customer
assim, você obtém uma nova "tabela" de linhasOrder
junto com novas colunas contendo o nome do cliente e o número do cliente (combinação de tabelas). Ou você pode criar uma exibição que selecione apenas pedidos não processados daOrder
tabela (filtro estático).Você selecionaria a partir da visualização como selecionaria em qualquer outra tabela "normal" - toda a filtragem "não estática" deve ser feita fora da visualização (como "Obter todos os pedidos de clientes chamados Miller" ou "Obter pedidos não processados que chegou em 24 de dezembro ").
fonte
Normalmente, as visualizações não são parametrizadas. Mas você sempre pode injetar alguns parâmetros. Por exemplo, usando o contexto da sessão :
Invocação:
E outro:
DBFiddle Demo
O mesmo se aplica ao Oracle (é claro que a sintaxe da função de contexto é diferente).
fonte
Por que você precisa de um parâmetro em exibição? Você pode apenas usar a
WHERE
cláusulae sua consulta deve fazer o trabalho:
fonte
WHERE
para a tabela, em vez deWHERE
para a exibição.Uma maneira hacky de fazê-lo sem procedimentos ou funções armazenadas seria criar uma tabela de configurações em seu banco de dados, com as colunas Id, Param1, Param2, etc. Insira uma linha nessa tabela contendo os valores Id = 1, Param1 = 0, Param2 = 0, etc. Em seguida, você pode adicionar uma junção a essa tabela na sua exibição para criar o efeito desejado e atualizar a tabela de configurações antes de executar a exibição. Se você tiver vários usuários atualizando a tabela de configurações e executando a exibição simultaneamente, as coisas podem dar errado, mas, caso contrário, deve funcionar bem. Algo como:
fonte
não. se você deve usar uma função definida pelo usuário para a qual você pode passar parâmetros.
fonte
Não, uma visualização não é consultada de maneira diferente de SELECTing from a table.
Para fazer o que você deseja, use uma função definida pelo usuário com valor de tabela com um ou mais parâmetros
fonte
Uma visualização nada mais é do que uma instrução 'SELECT' predefinida. Portanto, a única resposta real seria: Não, você não pode.
Eu acho que o que você realmente deseja fazer é criar um procedimento armazenado, onde, em princípio, você pode usar qualquer SQL válido para fazer o que quiser, incluindo aceitar parâmetros e selecionar dados.
Parece provável que você realmente só precise adicionar uma cláusula where quando selecionar a partir de sua exibição, mas não forneceu detalhes suficientes para ter certeza.
fonte
podemos escrever um procedimento armazenado com parâmetros de entrada e depois usá-lo para obter um conjunto de resultados da exibição. veja o exemplo abaixo.
o procedimento armazenado é
e a visão da qual podemos obter o conjunto de resultados é
fonte
Como eu sei, a visualização pode ser algo como o comando select. Você também pode adicionar parâmetros a essa seleção, por exemplo, em instruções onde:
fonte
Não, uma visualização é estática. Uma coisa que você pode fazer (dependendo da versão do servidor SQl) é indexar uma exibição.
No seu exemplo (consultando apenas uma tabela), uma exibição indexada não tem nenhum benefício em simplesmente consultar a tabela com um índice, mas se você estiver fazendo muitas junções em tabelas com condições de junção, uma exibição indexada poderá melhorar bastante o desempenho.
fonte
Se você não quiser usar uma função, poderá usar algo como isto
Espero que ajude
fonte
não, você pode passar o parâmetro para o procedimento em vista
fonte
Aqui está uma opção que eu não vi até agora:
Basta adicionar a coluna que você deseja restringir à exibição:
fonte
Você pode ignorar apenas para executar a exibição, o SQL irá chorar, mas faça isso e execute-o! Você não pode salvar.
fonte
Sua visão pode fazer referência a alguma tabela externa que contém seus parâmetros.
Como outros mencionados, a exibição no SQL Server não pode ter parâmetros de entrada externos. No entanto, você pode facilmente falsificar uma variável em sua exibição usando o CTE. Você pode testá-lo na sua versão do SQL Server.
produzindo saída:
também via
JOIN
também via
CROSS APPLY
fonte
Tenho uma ideia que ainda não tentei. Você pode fazer:
Seus parâmetros serão salvos e alterados na tabela Config.
fonte
Eu realizei esta tarefa para minhas necessidades da seguinte maneira
fonte