Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从T-SQL中的用户获取输入值?_Sql_Sql Server_Tsql - Fatal编程技术网

如何从T-SQL中的用户获取输入值?

如何从T-SQL中的用户获取输入值?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想知道如何在T-SQL中获取用户的输入 例如,我该如何做一个程序,从用户那里获取两个数字并将它们相加?永远不要这样做。将这两个值作为参数传递给function/sproc(更不用说使用SQL Server作为计算器了)。永远不要这样做。将这两个值作为参数传递给function/sproc(更不用说将SQL Server用作计算器了)。有许多选项,包括: 1) 创建一个存储过程,该过程接受用户提供给您的值 2) 根据用户提供的值动态创建Select语句 实际上,要正确回答此问题,您需要向我们提供

我想知道如何在T-SQL中获取用户的输入


例如,我该如何做一个程序,从用户那里获取两个数字并将它们相加?

永远不要这样做。将这两个值作为参数传递给function/sproc(更不用说使用SQL Server作为计算器了)。

永远不要这样做。将这两个值作为参数传递给function/sproc(更不用说将SQL Server用作计算器了)。

有许多选项,包括:

1) 创建一个存储过程,该过程接受用户提供给您的值

2) 根据用户提供的值动态创建Select语句


实际上,要正确回答此问题,您需要向我们提供更多信息,例如,您将如何从用户处获取信息,您打算如何查询数据库。

有许多选项,包括:

1) 创建一个存储过程,该过程接受用户提供给您的值

2) 根据用户提供的值动态创建Select语句


实际上,要正确回答这一问题,您需要向我们提供更多信息,例如,您将如何从用户处获取信息,您打算如何查询数据库。

将用户界面与持久性分离的分层体系结构永远无法做到这一点。持久性代码永远不应该离用户那么近。这样做是不可能的


这个例子可能是人为的,但答案是一样的:不要这样做。

将用户界面与持久性分离的分层体系结构永远不会做到这一点。持久性代码永远不应该离用户那么近。这样做是不可能的


这个例子可能是人为设计的,但答案是一样的:不要这样做。

有很多方法可以构建一个可以接受用户输入的UI。这可能是另一个问题的主题

<> P>其他评论者注意到,在直接接受用户输入时要考虑安全风险,在应用程序的多个层次上对数据进行清理是至关重要的。也就是说,所有数据驱动的应用程序都必须接受用户数据并对其进行操作。这并非不可能,重要的是你要充分了解风险。接受用户数据并在其上执行的潜在问题是,恶意用户有可能试图在您的数据库上执行自己的代码并删除表、提取敏感数据或其他令人讨厌的东西。除非整个应用程序都在一个coprorate防火墙后面,否则这对于没有重要安全经验的任何人来说都不是一项任务

这就是说,最简单的UI是让内部的可信用户安装SQLServerManagementStudio之类的东西,然后为他们提供调用存储过程的.SQL脚本。这种技术是我唯一可以推荐给信任的用户的技术

您可以创建如下过程:



然后指示用户这样调用它




此外,还可以构建一个UI来调用此过程并给出结果。但是,您需要仔细调节所需的访问和安全性。

有很多方法可以构建一个可以接受用户输入的UI。这可能是另一个问题的主题

<> P>其他评论者注意到,在直接接受用户输入时要考虑安全风险,在应用程序的多个层次上对数据进行清理是至关重要的。也就是说,所有数据驱动的应用程序都必须接受用户数据并对其进行操作。这并非不可能,重要的是你要充分了解风险。接受用户数据并在其上执行的潜在问题是,恶意用户有可能试图在您的数据库上执行自己的代码并删除表、提取敏感数据或其他令人讨厌的东西。除非整个应用程序都在一个coprorate防火墙后面,否则这对于没有重要安全经验的任何人来说都不是一项任务

这就是说,最简单的UI是让内部的可信用户安装SQLServerManagementStudio之类的东西,然后为他们提供调用存储过程的.SQL脚本。这种技术是我唯一可以推荐给信任的用户的技术

您可以创建如下过程:



然后指示用户这样调用它



此外,还可以构建一个UI来调用此过程并给出结果。但是,您需要仔细调节所需的访问和安全性。

我认为“a+b”是人们可以使用的建议示例,而不是他实际想做的事情。我认为“a+b”是人们可以使用的建议示例,而不是他实际想做的事情。
create procedure AddNumbers
    @augend int,
    @addend int
as
/* 
if all the input that you are accepting is numeric 
it is somewhat safer as long as you use int or numeric datatypes from the start.
I would stay away from using any alphanumeric data in a function like this 
without running it through some validation with a regular expression or other method.
*/
select @augend+@addend
execute AddNumbers
    @augend = 4,
    @addend = 5