MSSQL之九 存储过程与函数
作为数据库开发人员,你可能需要一起执行一系列SQL语句,SQL Sever允许你创建能一起执行的多个语句的批处理,批处理中可以包含控制流语句以及在执行语句之前检查条件的条件逻辑。 当你需要在不同时间重复的执行批处理时,可以把批处理保存为存储过程和函数的
作为数据库开发人员,你可能需要一起执行一系列SQL语句,SQL Sever允许你创建能一起执行的多个语句的批处理,批处理中可以包含控制流语句以及在执行语句之前检查条件的条件逻辑。 当你需要在不同时间重复的执行批处理时,可以把批处理保存为存储过程和函数的数据库对象。这些数据库包含一个预编译的批处理,它可以不需要再编译而执行很多次。 本章解释如何创建批处理以执行多个SQL语句以及如何在SQL Sever2008实现存储过程和存储函数。
? 实现批处理 ? 实现存储过程 ? 实现函数
? 创建批处理 ? 创建存储过程 ? 创建带参数的存储过程 ? 从存储过程返回值 ? 创建标量、表值、内联表值函数
|
|
批处理是一组一起提交给SQL Sever执行的SQL语句。当执行批处理时SQL Sever将批处理的语句编译到一个称为执行计划的可执行单元。这样可以节省执行时间。
为了创建批处理,你可以写出多个SQL语句,后面在结尾跟着关键字Go,Go是一个命令,它指定批处理的结束。
使用变量
创建批处理的时候,你需要在执行的时候保存一些临时值,为存储这些临时值你可以声明变量并且为它们指定值.
定义变量
declare 变量名称 数据类型
给变量赋值
(1) 直接赋值
set 变量名称=值
(2) 从表中获得值
select 变量名称=值 from 表名
使用结构
If…else条件选择结构
If
else
CASE结构
CASE
WHEN THEN
[[WHEN THEN ] […]]
[ELSE ]
END
BEGIN…END语句块
BEGIN
END
WHILE循环结构
WHILE
BEGIN
[BREAK]
[CONTNUE]
[SQL语句或程序块]
END
|
什么是存储过程
存储过程是为完成特定的功能而汇集在一起的一组SQL程序语句,经编译后存储在数据库中的SQL程序。
.
当创建存储过程时,需要确定存储过程的三个组成部分:
(1)所有的输入参数以及传给调用者的输出参数。
(2)被执行的针对数据库的操作语句,包括调用其他存储过程的语句。
(3)返回给调用者的状态值,以指明调用是成功还是失败。
常用的系统存储过程
? 定义不带参数存储过程的语法
CREATE PROCEDURE 存储过程名
AS --注释:表示后面是存储过程要执行的语句
SQL语句
GO
? 定义带参数存储过程的语法
CREATE PROCEDURE 存储过程名
@参数1 数据类型[ = 默认值 OUTPUT],
…… ,
@参数n 数据类型[ = 默认值 OUTPUT]
AS --注释:表示后面是存储过程要执行的语句
SQL语句
GO
OUTPUT:指定存储过程必须返回一个参数.该存储过程的匹配参数也必须由关键字OUTPUT创建.使用游标变量作为参数时使用该关键字.
【例9-1】创一个存储过程,以简化对sc表的数据添加工作,使得在执行该存储过程时,其参数值作为数据添加到表中。
程序清单如下:
CREATE PROCEDURE [dbo].[ pr1_sc_ins]
@Param1 char(10),@Param2char(2),@Param3 real
AS
BEGIN
insert into sc(sno,cno,score) values(@Param1,@Param2,@Param3)
END
【例9-2】创建一个带有参数的简单存储过程,从视图中返回指定的雇员(提供名和姓)及其职务和部门名称,该存储过程接受与传递的参数精确匹配的值
程序清单如下。
USE AdventureWorks;
GO
CREATE PROCEDURE GetEmployees
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT LastName, FirstName, JobTitle,Department
FROM HumanResources.vEmployeeDepartment
WHERE FirstName = @firstname AND LastName =@lastname;
GO
? 调用存储过程语法
EXEC PROCEDURE 存储过程名
【例9-3】执行存储过程au_infor_all。
au_infor_all 存储过程可以通过以下方法执行:
EXECUTE(EXEC) au_infor_all
【例9-4】使用 EXECUTE 命令传递参数,执行例9-1定义的存储过程pr1_sc_ins。
sc_ins存储过程可以通过以下方法执行:
EXEC pr1_sc_ins ‘3130040101’,’c1’,85
当然,在执行过程中变量可以显式命名:
EXEC sc_ins @Param1=’ 3130040101’,@Param2=’c1’,@Param3=85
【例9-5】 执行例9-2定义的存储过程GetEmployees。
GetEmployees存储过程可以通过以下方法执行:
EXECUTE(EXEC) GetEmployees'Dull', 'Ann' 或者
EXECUTE(EXEC) GetEmployees@lastname = 'Dull', @firstname = 'Ann' 或者
EXECUTE(EXEC) GetEmployees@firstname = 'Ann', @lastname = 'Dull'
修改存储过程
重命名存储过程
例: 把存储名称p_name修改为 p-address
EXEC sp_rename ‘p_name’,’p_address’
删除存储过程
例: 删除存储过程p_name
DROP PROCEDURE p_name
|
你可以创建函数来永久存储一系列SQL语句,根据函数返回值形式的不同,用户定义的函数有标量函数和表值函数.
? 创建函数的语法:
CreateFunction[schema_name] function_name
([{@parameter_name[AS][type_schema_name.]
parameter_data_type
[=default] }
[,…n ]
]
)
Returnsreturn_data_type
[WIIH
[AS]
BEGIN
function_body
return expression
END
@parameter_name 是在函数中的参数.可以有一个或多个被声明的参数.
[typr_schema_name] parameter_data_type 是参数的数据类型,和可选的它的所属的模式.
[=default] 是参数的默认值.
return_data_type 是一个标量的用户定义函数的返回值.
function body 指定一系列T-SQL语句.
? 创建标量函数
标量函数接受一个参数并且返回在RETURNS从句中指定的类型的一个数据值。标量函数可以返回除了文本、ntext、图片、光标和时间戳之外的任何数据类型。有些标量函数,例如current_timestamp,不需要任何参数。
语法:
create function 函数名(@变量名1 数据类型)
returns 返回值的数据类型
as
begin
declare @变量名2 数据类型
select @变量名2=sum(列名) from 表名1 where 主键名=@变量2
return @变量名2
end
select 函数名(主键名) from 表名2
例如:
CREATE FUNCTION HumanResources.MonthlySal (@PayRate float)
RETURNS float
AS
BEGIN
RETURN (@PayRate * 8 * 30)
END
例如:
DECLARE @PayRate float
SET @PauRate = HumanResources.MonthlySal(12.25)
PRINT @PauRate
注释:上述代码中,@PayRate是一个变量,它将存储MonthlySal函数返回的值。
创建表值函数
内联表值函数从一个SELECT语句的结果集返回一个表数据的变量。内联函数不再BEGIN和END语句中包含函数体。
例子1:
Create function fx_Department_name(@grnamenavarchar(20))
Return table
As
Return(
Select *
FromHumanResources.Department
WhereGroupName=@grname
)
GO
这里的内联表,接收一组名称作为参数并且饭回来自Department表属于组的部门的详情。
使用 SELECT*FROM fx_Department_name 可以查看上述代码的输出。
多语句表值函数
多语句表值函数使用多个语句来创建表,它被返回给调用语句。函数体包含BEGIN.。。。END块,它保存一系列T-SQL语句以创建和插入行盗临时表。临时表被在结果集中返回,并且基于函数中提到的规范创建。
语法:
create function 函数名(@变量名1 数据类型)
returns @变量名2 table
(
和创建表中的内容一样
)
as
begin
insert @变量名2 select表中的列名 from 表名 ----指把表中的内容加到新创建的函数表中
where 表中的另一个列名>@变量名1
insert @变量名2values(.......)
end
select * from 函数名(表中的另一个列中的内容)
例如:
CREATE FUNCTION PayRate (@rate money)
RETURNS @table TABLE
(EmployeeID int NOT NULL,
RateChangeDate datetime NOT NULL,
Ratemoney NOT NULL,
PayFrequency tinyint NOT NULL,
ModifiedDate datetime NOTNULL)
AS
BEGIN
INSERT@table
SELECT *
FROMHumanResources.EmployeePayHistory
WHERE Rate> @rate
RETURN
END
语句:
SELECT *FROM PayRate(45)
注释:
函数以在函数内创建的临时表@table,的形式返回一个结果集。以上的语句执行函数。
|
1、批处理的用途是什么?
2、在批处理中本地变量的范围是什么?
3、存储过程如何返回值?
4、下面的哪个结构被使用,当你需要重复执行一系列T-SQL语句的时候?
A、try – catch块
B、while语句
C、if-else语句
D、case语句
|
1、批处理是一系列一起提交到服务器执行的SQL语句。
2、你可以使用变量存储一个临时值。
3、你可以使用print语句来在屏幕上显示一个变量的内容。
4、你可以在批处理中使用注释给代码写注释。
5、你可以使用 if –else语句从条件执行SQL语句。
6、CASE语句求一系列条件的值并且返回各种可能结果中的一个。
7、你可以在批处理中使用WHILE语句以允许一系列T-SQL语句重复执行,只要给定条件为真。
8、BREAK语句导致从WHILE循环中退出。
9、存储过程是各种T-SQL语句的集合,它被存储在一个名字下,并且作为一个单元执行。
10、存储过程可以使用CREATE PROCEDURE语句创建。
11、存储过程允许你声明参数、变量和使用T-SQL语句并且编程逻辑。
12、存储过程提供更好的性能、安全性和准确性并且减少网络拥塞
13、存储过程通过输入参数接受数据。
14、存储过程通过输出参数或返回语句返回数据。
15、存储过程可以使用EXECUTE语句执行。
16、存储过程使用alter procedute语句执行修改
17、用户定函数是一个数据库对象,它包含一系列T-SQL语句。
18、用户定义函数可以返回一个单一标量值或结果集。
핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

C++의 예외 처리는 특정 오류 메시지, 상황별 정보를 제공하고 오류 유형에 따라 사용자 지정 작업을 수행하는 사용자 지정 예외 클래스를 통해 향상될 수 있습니다. 특정 오류 정보를 제공하려면 std::Exception에서 상속된 예외 클래스를 정의하세요. 사용자 정의 예외를 발생시키려면 throw 키워드를 사용하십시오. try-catch 블록에서 Dynamic_cast를 사용하여 발견된 예외를 사용자 지정 예외 유형으로 변환합니다. 실제 경우 open_file 함수는 FileNotFoundException 예외를 발생시킵니다. 예외를 포착하고 처리하면 보다 구체적인 오류 메시지가 제공될 수 있습니다.

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.

PHP 함수의 새로운 기능은 다음을 포함하여 개발 프로세스를 크게 단순화합니다. Arrow 함수: 간결한 익명 함수 구문을 제공하여 코드 중복을 줄입니다. 속성 유형 선언: 클래스 속성의 유형을 지정하고, 코드 가독성과 안정성을 향상시키며, 런타임 시 자동으로 유형 검사를 수행합니다. null 연산자: null 값을 간결하게 확인하고 처리하며 선택적 매개변수를 처리하는 데 사용할 수 있습니다.

Go의 함수에 지도를 전달하면 기본적으로 복사본이 생성되며 복사본을 수정해도 원본 지도에는 영향을 미치지 않습니다. 원본 지도를 수정해야 하는 경우 포인터를 통해 전달할 수 있습니다. 빈 맵은 기술적으로 nil 포인터이기 때문에 주의해서 처리해야 하며, 비어 있지 않은 맵을 기대하는 함수에 빈 맵을 전달하면 오류가 발생합니다.
