我在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的值?除了我,只是让评论线告诉他们这样做?
答案 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不适合胆小的人,但它是免费的,所以你可以毫不费力地尝试它。
答案 4 :(得分:0)
我将TOAD用于SQL Server,您可以在其中将“运行时输入字段”定义为脚本的一部分。
即
select * from myTable AS m where m.ID = :MyValue
:MyValue
是您的参数,当TOAD运行SQL命令时,它将提示用户即时输入一个值。可惜SSMS不提供此功能。