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?

Author: Vbasic4now, 2015-06-25

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.

 7
Author: Giorgi Nakeuri, 2015-06-25 13:54:17
Pode ligar para esta consulta de uma linguagem de programação diferente? O SQL não é eficaz para a tarefa que está a descrever. Uma linguagem de alto nível, como Python/Java/C#, permitir-lhe-ia facilmente pedir a entrada do Usuário e seria, sem dúvida, mais adequado para o trabalho.

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.

 2
Author: Alex, 2015-06-25 13:47:26

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.

 2
Author: Stan, 2015-06-25 13:49:38

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.

Tópico Stackoverflow

 1
Author: Jon Bushey, 2017-10-03 21:35:21