Como pedir a um utilizador de pesquisa SQL para introduzir informações
Tenho uma consulta que escrevi no servidor SQL que será executada principalmente por pessoas que não conhecem SQL, e há duas áreas que têm de ter uma string ou data diferente introduzida cada vez que a consulta é executada. A partir de Agora, eu apenas escrevi isso para que você digite a informação no topo da consulta e sua armazenada como uma variável. Existe uma maneira que eu posso obter SQL para pedir a pessoa executando a consulta para inserir os dados? abaixo está um trecho do código que tem o que eu estou falando em ele.
declare
/*ENTER ACCOUNTING MONTH*/
@amon VARCHAR(2) = '05',
/*ENTER INVOICE DATE IN MM/DD/YYYY FORMAT*/
@invdate DATE = '05/31/2015'
~~
rest of the code
~~
declare @sumA numeric(25, 5), @sumB numeric(25, 5), @ratio numeric(25, 5)
select @sumA = sum(amnt) from accnt where accno = '1152'
select @sumB = sum(amnt) from acc1152
update acc1152 set amnt = amnt * (@sumA/@sumB),
amon = @amon,
invdate = @invdate,
ven = '1152',
code = '1152',
invno = 'INVENTORY'
então é possível para o SQL pedir ao Usuário para digitar o valor de @amon e @invdate? para além de eu ter a linha de comentários a dizer-lhes para o fazerem?
4 answers
No caso de não poder fazer uma aplicação, não tem programadores, etc., tem uma forma-fazer um proc armazenado:
create stored procedure spDoSomeJob
@amon VARCHAR(2),
@invdate DATE
as
begin
~~
rest of the code
~~
declare @sumA numeric(25, 5), @sumB numeric(25, 5), @ratio numeric(25, 5)
select @sumA = sum(amnt) from accnt where accno = '1152'
select @sumB = sum(amnt) from acc1152
update acc1152 set amnt = amnt * (@sumA/@sumB),
amon = @amon,
invdate = @invdate,
ven = '1152',
code = '1152',
invno = 'INVENTORY'
end
Negar todas as permissões de actividade para os utilizadores, excepto apenas executar este procedimento. Execute-o como:
exec spDoSomeJob @amon = '05', @invdate = '05/31/2015'
Pelo menos você terá certeza de que nenhum usuário pode ocasionalmente corromper algo... E se você não fornecer valores para os parâmetros do procedimento armazenado, ele o levará a fazer isso, a menos que você não tenha valores padrão para esses parâmetros. Parece-me como a melhor solução para o seu caso.
Se realmente quiser fazer alguma coisa em SQL e eles estiverem a usar o SSMS, então poderá usar o SSMS templates e deixar os utilizadores indicar os valores dos parâmetros usando o CTRL+SHIFT+M, ainda que eu desincentive isto abordagem.
Como outros já mencionaram, o servidor SQL e o Estúdio de gestão não se destinam a ser Ferramentas de utilizador final.
Dado que está a usar o servidor SQL, tem uma ferramenta (talvez não instalada e configurada) chamada SQL Server Reporting Services (SSRS).
O tem a capacidade de pedir aos utilizadores valores para os parâmetros.
A sua consulta vai para o desenhador de Relatórios, as variáveis @ tornam-se Filtros de relatórios (bastante automaticamente) e você pode fazer algum bom esquema.
O papel e a impressão não estão envolvidos. Na verdade, a SSRS é especializada em um relatório de perfuração em outro, passando valores iniciais para a próxima consulta.
Outra solução é usar o PowerShell para pedir entrada ao utilizador e, em seguida, passar esses dados para o seu script como ele é executado pelo PowerShell. No computador do usuário, você pode precisar instalar algumas extensões PowerShell para que eles executem o TSQL. Como import-module sqlps. PowerShell não é para os fracos de coração, mas é livre e assim você poderia experimentá-lo sem um grande compromisso.