如何提示 SQL 查询用户输入信息
How to prompt an SQL query user to input information
我在 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 和 @invdate 的值?除了我只是让评论行告诉他们这样做吗?
您能否使用其他编程语言调用此查询? SQL 对您描述的任务无效。 Python/Java/C# 等高级语言可以让您轻松提示用户输入,并且可以说更适合这项工作。
如果您真的想在 SQL 中做某事并且他们正在使用 SSMS,那么您可以使用 SSMS templates 并让用户使用 CTRL+SHIFT+M 输入参数值,尽管我不鼓励这种方法。
如果你不能做一个应用程序,你没有开发人员等等,你有一个方法 - 制作一个存储过程:
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
拒绝用户的任何 activity 权限,但 运行 此过程除外。像这样执行:
exec spDoSomeJob @amon = '05', @invdate = '05/31/2015'
至少您可以确定没有用户偶尔会损坏某些东西...如果您不为存储过程的参数提供值,它会提示您这样做,除非您没有这些参数的默认值。在我看来,这似乎是您案例的最佳解决方法。
正如其他人所提到的,SQL Server 和 Management Studio 并非旨在用作最终用户工具。
由于您使用的是 SQL SERVER,因此您有一个名为 SQL Server Reporting Services (SSRS) 的工具(可能尚未安装和配置)。
它能够提示用户输入参数值。
您的查询进入报表设计器,@变量成为报表过滤器(非常自动),您可以制作一些漂亮的布局。
不涉及纸张和打印。事实上,SSRS 擅长将一个报告钻入另一个报告,为下一个查询传递起始值。
另一种解决方案是使用 PowerShell 要求用户输入,然后将该数据传递给您的脚本,因为它是 PowerShell 运行。在用户的计算机上,您可能需要安装一些 PowerShell 扩展,以便它们 运行 TSQL。像导入模块 sqlps。 PowerShell 不适合胆小的人,但它是免费的,因此您可以免费试用。
Whosebug Topic
我将 TOAD 用于 SQL 服务器,您可以在其中将 "runtime input fields" 定义为脚本的一部分。
即
select * from myTable AS m where m.ID = :MyValue
:MyValue
是您的参数,当 TOAD 运行 SQL 命令时,它会提示用户即时输入一个值。很遗憾 SSMS 没有提供此功能。
我在 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 和 @invdate 的值?除了我只是让评论行告诉他们这样做吗?
您能否使用其他编程语言调用此查询? SQL 对您描述的任务无效。 Python/Java/C# 等高级语言可以让您轻松提示用户输入,并且可以说更适合这项工作。
如果您真的想在 SQL 中做某事并且他们正在使用 SSMS,那么您可以使用 SSMS templates 并让用户使用 CTRL+SHIFT+M 输入参数值,尽管我不鼓励这种方法。
如果你不能做一个应用程序,你没有开发人员等等,你有一个方法 - 制作一个存储过程:
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
拒绝用户的任何 activity 权限,但 运行 此过程除外。像这样执行:
exec spDoSomeJob @amon = '05', @invdate = '05/31/2015'
至少您可以确定没有用户偶尔会损坏某些东西...如果您不为存储过程的参数提供值,它会提示您这样做,除非您没有这些参数的默认值。在我看来,这似乎是您案例的最佳解决方法。
正如其他人所提到的,SQL Server 和 Management Studio 并非旨在用作最终用户工具。
由于您使用的是 SQL SERVER,因此您有一个名为 SQL Server Reporting Services (SSRS) 的工具(可能尚未安装和配置)。
它能够提示用户输入参数值。
您的查询进入报表设计器,@变量成为报表过滤器(非常自动),您可以制作一些漂亮的布局。
不涉及纸张和打印。事实上,SSRS 擅长将一个报告钻入另一个报告,为下一个查询传递起始值。
另一种解决方案是使用 PowerShell 要求用户输入,然后将该数据传递给您的脚本,因为它是 PowerShell 运行。在用户的计算机上,您可能需要安装一些 PowerShell 扩展,以便它们 运行 TSQL。像导入模块 sqlps。 PowerShell 不适合胆小的人,但它是免费的,因此您可以免费试用。
Whosebug Topic
我将 TOAD 用于 SQL 服务器,您可以在其中将 "runtime input fields" 定义为脚本的一部分。
即
select * from myTable AS m where m.ID = :MyValue
:MyValue
是您的参数,当 TOAD 运行 SQL 命令时,它会提示用户即时输入一个值。很遗憾 SSMS 没有提供此功能。