如何提示SQL查询用户输入信息

时间:2015-06-25 13:34:36

标签: sql-server variables command-prompt prompt

我在SQL服务器中编写的查询主要由不了解SQL的人运行,并且每次运行查询时都有两个区域必须输入不同的字符串或日期。到目前为止,我只是编写它,以便您在查询顶部输入信息并将其存储为变量。有没有办法让我可以让SQL提示运行查询的人输入数据?下面是我正在谈论的代码的摘录。

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'

那么SQL是否可以提示用户输入@amon和@invate的值?除了我,只是让评论线告诉他们这样做?

5 个答案:

答案 0 :(得分:8)

如果你不能做一个应用程序,你没有开发人员等等,你有一种方法 - 制作存储过程:

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

拒绝用户的任何活动权限,只是运行此过程。执行它如:

exec spDoSomeJob  @amon = '05', @invdate = '05/31/2015'

至少你会确定没有用户偶尔可以破坏某些东西......如果你不为存储过程的参数提供值,它将提示你这样做,除非你没有这些参数的默认值。在我看来,这似乎是你案件的最佳解决方法。

答案 1 :(得分:2)

您是否可以使用其他编程语言调用此查询? SQL对您描述的任务无效。 Python / Java / C#等高级语言可以让您轻松提示用户输入,并且可以说更适合这项工作。

如果您真的想在SQL中执行某些操作并且他们正在使用SSMS,那么您可以使用SSMS templates并让用户使用CTRL + SHIFT + M输入参数值,但我不鼓励这种方法。

答案 2 :(得分:2)

正如其他人所提到的,SQL Server和Management Studio并不是最终用户工具。

由于您使用的是SQL SERVER,因此您有一个名为SQL Server Reporting Services(SSRS)的工具(可能未安装和配置)。

能够提示用户输入参数值。

您的查询进入报表设计器,@变量成为报表过滤器(非常自动),您可以进行一些不错的布局。

不涉及纸张和印刷。事实上,SSRS专注于一个钻取到另一个报告的报告,为下一个查询传递起始值。

答案 3 :(得分:2)

另一种解决方案是使用PowerShell向用户询问输入,然后将该数据传递给PowerShell运行的脚本。在用户的计算机上,您可能需要安装一些PowerShell扩展才能运行TSQL。像import-module sqlps一样。 PowerShell不适合胆小的人,但它是免费的,所以你可以毫不费力地尝试它。

Stackoverflow Topic

答案 4 :(得分:0)

我将TOAD用于SQL Server,您可以在其中将“运行时输入字段”定义为脚本的一部分。

select * from myTable AS m where m.ID = :MyValue

:MyValue是您的参数,当TOAD运行SQL命令时,它将提示用户即时输入一个值。可惜SSMS不提供此功能。