创建存储过程
-
开始之前: 权限
-
创建存储过程,使用: SQL Server Management Studio、Transact-SQL
需要在数据库中有 CREATE PROCEDURE 权限,对在其中创建过程的架构有 ALTER 权限。
您可以使用以下项之一:
-
SQL Server Management Studio
-
Transact-SQL
使用 SQL Server Management Studio
在对象资源管理器中创建过程
-
在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。
-
依次展开“数据库”、 AdventureWorks2012 数据库和“可编程性”。
-
右键单击“存储过程”,再单击“新建存储过程”。
-
在“查询”菜单上,单击“指定模板参数的值”。
-
在“指定模板参数的值”对话框中,输入下列所示的参数值。
-
单击“确定”。
-
在“查询编辑器”中,使用以下语句替换 SELECT 语句:
Transact-SQLSELECT FirstName, LastName, Department FROM HumanResources.vEmployeeDepartmentHistory WHERE FirstName = @FirstName AND LastName = @LastName AND EndDate IS NULL; -
若要测试语法,请在“查询”菜单上,单击“分析”。 如果返回错误消息,则请将这些语句与上述信息进行比较,并视需要进行更正。
-
若要创建该过程,请在“查询”菜单上单击“执行”。 该过程作为数据库中的对象创建。
-
若要查看在对象资源管理器中列出的过程,请右键单击“存储过程”,然后选择“刷新”。
-
若要运行该过程,请在对象资源管理器中右键单击存储过程名称 HumanResources.uspGetEmployeesTest,然后选择“执行存储过程”。
-
在“执行过程”窗口中,输入 Margheim 作为参数 @LastName 的值,并且输入值 Diane 作为参数 @FirstName 的值。
验证所有用户的输入。 验证前请勿连接用户输入。 绝对不要执行根据尚未验证的用户输入构造的命令。 |
[返回页首]
使用 Transact-SQL
在查询编辑器中创建过程
-
在“对象资源管理器”中,连接到数据库引擎的实例。
-
从“文件”菜单中,单击“新建查询”。
-
将以下示例复制并粘贴到查询窗口中,然后单击“执行”。 该示例将使用其他过程名称创建与上述相同的存储过程。
Transact-SQLUSE AdventureWorks2012; GO CREATE PROCEDURE HumanResources.uspGetEmployeesTest2 @LastName nvarchar(50), @FirstName nvarchar(50) AS SET NOCOUNT ON; SELECT FirstName, LastName, Department FROM HumanResources.vEmployeeDepartmentHistory WHERE FirstName = @FirstName AND LastName = @LastName AND EndDate IS NULL; GO
-
若要运行该过程,请将以下示例复制并粘贴到一个新的查询窗口中,然后单击“执行”。 请注意,将显示指定参数值的不同方法。
Transact-SQLEXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar'; -- Or EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar'; GO -- Or EXECUTE HumanResources.uspGetEmployeesTest2 @FirstName = N'Pilar', @LastName = N'Ackerman'; GO
创建过程:
1. 利用工具栏打开[Query]窗口编写sql:
注意:如果不用参数,红色方框里面的左右括号也是必要的
2.利用工具栏打开[Function]向导
存储过程的调用
1.[Query]中直接写SQL
CALL test( ' 城北 ');2.对象浏览器中[Functions]下找到该存储过程右键执行,然后输入参数
注意:如果参数是字符串,记得加单引号
实践练习:
表tbl_student
create PROCEDURE testStu(region varchar( 10))BEGINselect * from tbl_student where name =region;end
call testStu('nick');
result:
dao层code:
public Student get(int id) {Connection con = null;PreparedStatement psmt = null;ResultSet r = null;Student stu = new Student();try {con = JdbcUtil.getConnection();//String sql = "select * from tbl_student where id = ?";String sql = "call findStuById(?)";//用存储过程更利于代码维护psmt = con.prepareStatement(sql);psmt.setInt(1, id);r = psmt.executeQuery();if (r.next()) {stu.setId(r.getInt("id"));stu.setSno(r.getString("sno"));stu.setName(r.getString("name"));stu.setAge(r.getInt("age"));stu.setClassId(r.getInt("class"));stu.setHobby(r.getString("hobby"));stu.setGrade(r.getInt("grade"));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{JdbcUtil.dealException(r, psmt, con);}return stu;}