sqlsever 存储过程
时间: 2024-12-30 17:28:18 浏览: 10
### SQL Server 存储过程教程及示例
#### 创建存储过程
存储过程是在SQL Server数据库中预先编译和存储的一系列SQL语句的集合。这些过程能够接受输入参数,并可返回多个结果集给调用程序[^1]。
下面是一个创建简单存储过程的例子,该过程用于查询学生表中的所有记录:
```sql
CREATE PROCEDURE GetAllStudents
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM Students;
END
```
此代码片段定义了一个名为`GetAllStudents`的过程,它不带任何参数并执行对学生表的选择操作。
#### 使用带有参数的存储过程
为了使存储过程更加灵活,可以为其添加参数。例如,如果想要通过ID获取特定的学生信息,则可以这样设计:
```sql
CREATE PROCEDURE GetStudentByID (@studentID INT)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Students
WHERE ID = @studentID;
END
```
这里引入了`@studentID`作为输入参数来过滤所需的数据条目[^2]。
#### 调用存储过程
一旦创建好之后就可以很方便地对其进行调用了。对于上面提到的两个例子而言,在T-SQL命令行工具或其他支持的应用程序里分别如下所示:
- **无参**
```sql
EXEC GetAllStudents;
```
- **有参**
```sql
EXEC GetStudentByID 1; -- 假设要找的是ID为1的学生的信息
```
这表明无论是否有参数参与其中,都可以轻松实现对已编写好的存储过程的有效利用。
#### 游标的使用案例
有时可能需要逐行处理数据而不是一次性全部取出。这时就涉及到游标的概念。考虑这样一个场景——遍历某张表格并将每一条记录里的某些字段打印出来:
```sql
CREATE PROCEDURE PrintNamesAndPhones
AS
BEGIN
DECLARE @sName VARCHAR(20),
@phone VARCHAR(20);
DECLARE cursor1 CURSOR FOR
SELECT Name, PhoneNumber
FROM t_student;
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO @sName, @phone;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '姓名:' + @sName + ' 电话:' + @phone;
FETCH NEXT FROM cursor1 INTO @sName, @phone;
END;
CLOSE cursor1;
DEALLOCATE cursor1;
END
```
这段脚本展示了如何声明、打开以及关闭游标,并且在循环体内完成相应业务逻辑的操作[^3]。
阅读全文