SQL Server存储过程SQL Server存储过程将代码中那些丑陋的字符串转换为数据库中的小程序。在代码中构建SQL查询的一个问题是所谓的SQL注入。对于存储过程,只要在语句中不使用动态SQL,就可以防止SQL注入。SQL Server存储过程与其他前端代码语言略有不同,因此在了解如何构建和运行它们之前需要一些实践。

学习如何使用SQL Server和存储过程

创建存储过程

就像创建表一样,SQL Server使用“create”关键字来创建过程。以下是创建名为" myproc "的存储过程的示例代码:

创建过程myproc(

@ num1 int.

@num2 int

作为

在上面的代码中,“创建过程”(您也可以使用“创建proc”作为快捷方式)是创建SQL Server存储过程的主要语法。以下“MyProc”语句是您存储的过程的名称。如果您在代码中调用存储过程,您是否需要此名称是C#,PHP或任何其他语言。

括号中的文本是用于输入的参数。这些参数是保护您免受SQL注入的原因。当您从代码中传递这些参数而无论输入如何,它都包含在参数中。只要您不使用动态SQL来构建SQL语句,可以避免使用存储过程的SQL注入。

了解udemy.com上的存储过程和SQL Server语法

在上面的示例代码中,两个参数需要整数输入。您无法通过其他类型的输入。例如,如果您尝试传递字符串或十进制数,则代码将显示错误。

最后,“go”声明指示SQL编译器执行该语句。您的SQL代码位于Go和AS语句之间。上面的代码只是用于创建存储过程的语法。但是,没有SQL语句,因此该过程一无所有。以下代码为您的过程添加了SELECT语句:

创建过程myproc(

@ num1 int,

@num2 int

作为

Select * from ordernumber = @num1 and ordercount = @num2

如果您熟悉SQL代码,就可以确定上述过程完成了什么。该语句从orders表中选择所有列。参数@num1和@num2用于筛选结果。在本例中,只返回具有特定订单号和数量的订单。您可以使用SQL参数进行任何类型的数据过滤和操作。

使用维护计划维护您的SQL Server。

例如,下面的代码创建了一个存储过程,将用户的名字和姓氏插入到“users”表中:

创建过程myproc(

@fname varchar (50),

@lname varchar(50)

作为

插入用户(first_name,last_name)值(@fname,@lname)

注意存储过程的参数数据类型与先前的示例不同。“varchar”数据类型用于字符串。还有其他字符串数据类型,但varchar数据类型允许您输入1个字符或数百个字符串。在此示例中,VARCHAR数据类型设置为50.这意味着您的代码可以将多达50个字符传递给参数。如果您不小心通过了50多个字符,则50个字符限制后的任何字符将被截断。这原因是您应该始终确保存储过程参数允许大量的字符。

您还可以检索您刚插入数据库中的数据。当您有一个要求用户插入信息的网站时,这很有用。您插入信息,然后检索它以确认。例如,当您的用户将物品添加到购物车时,您将这些项目存储在数据库中。在用户检查之前,您可以显示确认项目。

以下SQL语句插入名字和姓氏,然后检索最近添加的数据:

创建过程myproc(

@fname varchar (50),

@lname varchar(50)

作为

插入用户(first_name,last_name)值(@fname,@lname)

Select * from users where userid = @@identity

在上面的代码中,用户的第一个和姓氏被输入到用户表中。然后,检索最近的记录。在此示例中,请注意SELECT语句中使用的“@@ identity”。SQL Server有一些内部函数,这是一个属性,您可以使用它来获取输入到数据库中的最后一个身份记录。此代码假定有一个自动递增的标识列。如果您没有主键,它将被视为糟糕的表设计,该主键标识表中唯一行。某些表设计器使用其他唯一标识符,但许多设计人员使用自动递增的整数。

您还可以删除和更新存储过程中的记录。下面是一个基于用户ID更新记录的存储过程:

创建过程myproc(

@fname varchar (50),

@lname varchar (50),

@userid int

作为

更新用户组(电子邮件保护)(电子邮件保护)在哪里(电子邮件保护)

Select * from userid = @userid

上面的代码用新的名和姓更新用户。注意添加了另一个参数。传递@userid参数以确保只更新了一个用户。如果您删除了这个参数,就会更新整个表。显然,您不希望更新姓氏相同的所有记录,因此在“where”子句中添加userid参数。

您还可以选择更改现有的存储过程。要改变一个过程,可以使用" alter "关键字。下面的语句改变了一个存储过程:

更改程序MyProc(

@fname varchar (50),

@lname varchar (50),

@userid int

作为

Select * from userid = @userid

如果您运行上述代码,它将将现有的“MyProc”过程更改为新代码。在这种情况下,SELECT语句运行。运行此语句会覆盖存储过程中的任何当前语句,因此请确保在更改之前更改过程。

如果您已经编写了SQL语句,则存储过程并不困难。但是,转换任何内联的SQL代码将保护您的应用程序免受SQL注入的影响。

特色课程

构建数据库Web应用PHP | OOP | PDO | AJAX | MySQL

最后更新2016年8月

评价最高
  • 总为19个小时
  • 76讲座
  • 所有级别
4.7 (172)

使用PHP, OOP, PDO, Bootstrap和AJAX |学习和构建一个功能齐全的Web应用程序的完整解决方案由Paul Amissah.

探索课程

数据库开发者工具学生也会学习

让你的团队。领导行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求一个演示