SQL 데이터베이스 저장 프로 세 스 예제 분석
저장 프로시저 의 장점:
1.데이터베이스 에서 동작 을 수행 할 때 먼저 컴 파일 한 후에 실 행 됩 니 다.그러나 저장 과정 은 컴 파일 된 코드 블록 이기 때문에 실행 효율 이 T-SQL 문장 보다 높다.
2.하나의 저장 과정 은 프로그램 이 네트워크 에서 상호작용 을 할 때 많은 T-SQL 문 구 를 대체 할 수 있 기 때문에 네트워크 의 통 신 량 을 낮 추고 통신 속 도 를 높 일 수 있다.
3.저장 과정 을 통 해 권한 이 없 는 사용자 가 제어 하에 데이터 베 이 스 를 간접 적 으로 액세스 하여 데이터 의 안전 을 확보 할 수 있다.
소결:한 마디 로 하면 저장 과정 은 좋 은 것 이 고 프로젝트 를 할 때 필수 적 인 이기 에 속 합 니 다.다음은 저장 과정의 기본 문법 을 소개 합 니 다.
저장 프로 세 스 의 문법 과 매개 변수 설명
저장 프로 세 스 의 기본 문법:
-------------- -----------------
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
-------------- -----------------
EXECUTE Procedure_name '' -- , :@ =value, value
-------------- -----------------
drop procedure procedure_name -- ,
저장 프로시저 생 성 인자:1.procedure_name:저장 프로 세 스 의 이름 을 앞 에 추가 합 니 다.\#부분 임시 저장 프로 세 스 입 니 다.추가\##전체 임시 저장 프로 세 스 입 니 다.
2.; number:같은 이름 의 프로 세 스 를 그룹 으로 나 눌 수 있 도록 선택 할 수 있 는 정수 입 니 다.DROP PROCEDURE 문 구 를 사용 하면 같은 그룹의 프로 세 스 를 함께 제거 할 수 있 습 니 다.예 를 들 어 orders 라 는 프로그램 이 사용 하 는 과정 을 orderproc 라 고 명명 할 수 있 습 니 다.1、orderproc;2 등.DROP PROCEDURE orderproc 문 구 는 전체 그룹 을 제거 합 니 다.이름 에 정 계 된 식별 자 를 포함 하고 있다 면 숫자 는 식별 자 에 포함 되 어 서 는 안 되 며 procedure 에 만 포함 되 어야 합 니 다.name 앞 뒤로 적당 한 경계선 을 사용 합 니 다.
3.@parameter:저장 과정의 매개 변수 입 니 다.하나 이상 있 을 수 있 습 니 다.사용 자 는 실행 과정 에서 설명 한 매개 변수의 값 을 제공 해 야 합 니 다.(이 매개 변수의 기본 값 을 정의 하지 않 는 한)저장 과정 은 최대 2.100 개의 매개 변 수 를 가 질 수 있다.
매개 변수 이름 을 지정 하려 면@기 호 를 첫 번 째 문자 로 사용 하 십시오.매개 변수 이름 은 식별 자의 규칙 에 부합 해 야 합 니 다.모든 과정의 매개 변 수 는 이 과정 자체 에 만 사 용 됩 니 다.같은 매개 변수 이름 은 다른 과정 에서 사용 할 수 있 습 니 다.기본 적 인 상황 에서 파 라 메 터 는 상수 만 대체 할 수 있 고 표 이름,열 이름 또는 다른 데이터베이스 대상 의 이름 을 대체 할 수 없습니다.더 많은 정보 에 대해 서 는 EXECUTE 를 참조 하 시기 바 랍 니 다.
4.data_type:매개 변수의 데이터 형식 입 니 다.모든 데이터 형식(text,ntext,image 포함)은 저장 과정의 매개 변수 로 사용 할 수 있 습 니 다.단,cursor 데이터 형식 은 OUTPUT 인자 에 만 사용 할 수 있 습 니 다.지정 한 데이터 형식 이 cursor 라면 VARYING 과 OUTPUT 키 워드 를 동시에 지정 해 야 합 니 다.SQL Server 가 제공 하 는 데이터 형식 과 문법 에 대한 더 많은 정 보 는 데이터 형식 을 참조 하 십시오.
cursor 데이터 형식 일 수 있 는 출력 매개 변수 에 대해 최대 수의 제한 이 없다 는 것 을 설명 합 니 다.
5.VARYING:출력 매개 변수 로 지원 하 는 결과 집합 을 지정 합 니 다.커서 파라미터 에 만 적 용 됩 니 다.
6.default:매개 변수의 기본 값 입 니 다.기본 값 이 정의 되면 이 매개 변수의 값 을 지정 하지 않 아 도 과정 을 수행 할 수 있 습 니 다.기본 값 은 상수 나 NULL 이 어야 합 니 다.프로 세 스 가 이 인자 에 LIKE 키 워드 를 사용 할 경우 기본 값 에 마스크(%,,[]포함)와[^].
7.OUTPUT:매개 변 수 는 반환 매개 변수 임 을 나타 낸다.이 옵션 의 값 은 EXEC[UTE]에 되 돌 릴 수 있 습 니 다.OUTPUT 인 자 를 사용 하면 호출 과정 에 정 보 를 되 돌려 줍 니 다.Text,ntext,image 인 자 는 OUTPUT 인자 로 사용 할 수 있 습 니 다.OUTPUT 키 워드 를 사용 하 는 출력 매개 변 수 는 커서 자리 표시 자 일 수 있 습 니 다.
8.RECOMPILE:SQL Server 가 이 프로 세 스 의 계획 을 캐 시 하지 않 음 을 나타 내 며 이 프로 세 스 는 실 행 될 때 다시 컴 파일 됩 니 다.메모리 에 캐 시 된 실행 계획 을 덮어 쓰 지 않 으 려 고 비 전형 값 이나 임시 값 을 사용 할 때 RECOMPILE 옵션 을 사용 하 십시오.
9.ENCRYPTION:SQL Server 암호 화 syscoments 표 에 CREATE PROCEDURE 구문 텍스트 가 포 함 된 항목 을 표시 합 니 다.ENCRYPTION 을 사용 하면 과정 을 SQL Server 복사 의 일부분 으로 발표 하 는 것 을 방지 할 수 있 습 니 다.업그레이드 과정 에서 SQL Server 는 syscoments 에 저 장 된 암호 화 주석 을 이용 하여 암호 화 과정 을 다시 만 드 는 것 을 설명 합 니 다.
10.FOR REPLICATION:구독 서버 에서 복사 로 만 든 저장 과정 을 실행 할 수 없 음 을 지정 합 니 다.FOR REPLICATION 옵션 을 사용 하여 만 든 저장 프로 세 스 는 저장 프로 세 스 로 선별 할 수 있 으 며 복사 과정 에서 만 실 행 될 수 있 습 니 다.이 옵션 은 WITH RECOMPILE 옵션 과 함께 사용 할 수 없습니다.
11.AS:수행 할 작업 을 지정 합 니 다.
12.sql_statement:과정 에 포 함 될 임의의 숫자 와 형식의 Transact-SQL 문 구 를 포함 합 니 다.제한 이 있 습 니 다.
소결:이런 기본 문법 을 본 후에 저 는 문법 에 따라 다양한 저장 과정 을 만 들 겠 습 니 다.
저장 프로시저 생 성
위의 표 에 대해 저 는 저장 과정 을 사용 하여 이 를 조작 합 니 다.
1.단일 기록 집의 저장 과정 만 되 돌려 줍 니 다.
------------- GetUserAccount ----------------
create Procedure GetUserAccount
as
select * from UserAccount
go
------------- ----------------
exec GetUserAccount
결과:select*from UserAccount 코드 를 실행 하 는 것 과 같 습 니 다.결 과 는 전체 표 의 데이터 입 니 다.2.입 출력 이 없 는 저장 프로시저
------------- GetUserAccount ----------------
create Procedure inUserAccount
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,'2013-01-02',9)
go
------------- ----------------
exec inUserAccount
결과:insert into UserAccount(UsernName,[PassWord],RegisterTime,RegisterIP)values(9,9,'2013-01-02',9)를 실행 하 는 것 과 같 습 니 다.3.반환 값 이 있 는 저장 과정
------------- GetUserAccount ----------------
create Procedure inUserAccountRe
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(10,10,'2013-01-02',10)
return @@rowcount
go
------------- ----------------
exec inUserAccountRe
설명:여기@rowcount 는 저장 과정 에 영향 을 미 치 는 줄 수 를 실행 하기 위해 실 행 된 결 과 는 데 이 터 를 삽입 할 뿐만 아니 라 return value=1 값 도 되 돌려 줍 니 다. ,이것 은 프로그램 에서 가 져 올 수 있 습 니 다.잠시 후 c\#저장 소 를 호출 하 는 과정 에서 말씀 드 리 겠 습 니 다.4.입력 매개 변수 와 출력 매개 변수 가 저장 되 는 과정
------------- GetUserAccount ----------------
create Procedure GetUserAccountRe
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
go
------------- ----------------
exec GetUserAccountRe '7',null
설명:@UserName 은 입력 매개 변수 이 고@UserID 는 출력 매개 변수 입 니 다.실행 결 과 는@userID 가 COOUT(*)즉=1 입 니 다.5.반환 값,입력 매개 변수,출력 매개 변 수 를 동시에 가 진 저장 과정
------------- GetUserAccount ----------------
create Procedure GetUserAccountRe1
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
return @@rowcount
go
------------- ----------------
exec GetUserAccountRe1 '7',null
결과:@userID 는 COOUT(*)즉=1,Retun Value=1 입 니 다.6.매개 변수 와 기록 집합 을 동시에 되 돌려 주 는 저장 과정
------------- GetUserAccount ----------------
create Procedure GetUserAccountRe2
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
select * from UserAccount
return @@rowcount
go
------------- ----------------
exec GetUserAccountRe2 '7',null
결과:select*from UserAccount 라 는 코드 를 실행 한 결과 집합 을 되 돌려 줍 니 다.또한@userID 는 COOUT(*)즉=1,Retun Value=9 입 니 다.7.여러 기록 집의 저장 과정 을 되 돌려 줍 니 다.
------------- GetUserAccount ----------------
create Procedure GetUserAccountRe3
as
select * from UserAccount
select * from UserAccount where UserID>5
go
------------- ----------------
exec GetUserAccountRe3
결과:두 개의 결과 집합 을 되 돌려 줍 니 다.하 나 는 select*from UserAccount 이 고,다른 하 나 는 select*from UserAccount where UserID>5 입 니 다.소결:위 에서 우 리 는 다양한 저장 과정 을 만 들 었 습 니 다.다음은 우리 가 c\#에서 이 저장 과정 을 어떻게 호출 하 는 지 보 겠 습 니 다.
C\#저장 프로시저 호출
여기 서 호출 된 저장 과정 은 위 에 내 가 쓴 각양각색의 저장 과정 이다.
public partial class ProcedureTest : System.Web.UI.Page
{
public static string conn = ConfigurationManager.ConnectionStrings["StuRelationDBConnectionString"].ConnectionString;
public SqlConnection con = new SqlConnection(conn);
protected void Page_Load(object sender, EventArgs e)
{
runGetUserAccountRe3();
}
// GetUserAccount
public void runGetUserAccount()
{
SqlDataAdapter dp = new SqlDataAdapter(common("GetUserAccount"));
DataSet ds = new DataSet();
// dataset
dp.Fill(ds);
rpt.DataSource = ds;
rpt.DataBind();
}
// inUserAccount
public void runinUserAccount()
{
con.Open();
Label1.Text = common("inUserAccount").ExecuteNonQuery().ToString();
con.Close();
}
// inUserAccountRe
public void runinUserAccountRe()
{
//
SqlCommand cmd = common("inUserAccountRe");
IDataParameter[] parameters = {
new SqlParameter("rval", SqlDbType.Int,4)
};
//
parameters[0].Direction = ParameterDirection.ReturnValue;
//
cmd.Parameters.Add(parameters[0]);
con.Open();
//
Label1.Text = cmd.ExecuteNonQuery().ToString();
con.Close();
//
Label1.Text += "-" + parameters[0].Value.ToString();
}
//
public void runGetUserAccountRe()
{
SqlCommand cmd = common("GetUserAccountRe");
//
IDataParameter[] parameters = {
new SqlParameter("@UserName", SqlDbType.NChar,20) ,
new SqlParameter("@UserID", SqlDbType.Int) ,
};
//
parameters[0].Value = "7";
parameters[1].Direction = ParameterDirection.Output; //
//
cmd.Parameters.Add(parameters[0]);
cmd.Parameters.Add(parameters[1]);
con.Open();
//
Label1.Text = cmd.ExecuteNonQuery().ToString();
con.Close();
//
Label1.Text += "-" + parameters[1].Value.ToString();
}
// 、 、 GetUserAccountRe1
public void runGetUserAccountRe1()
{
SqlCommand cmd = common("GetUserAccountRe1");
//
IDataParameter[] parameters = {
new SqlParameter("@UserName", SqlDbType.NChar,20) ,
new SqlParameter("@UserID", SqlDbType.Int) ,
new SqlParameter("rval", SqlDbType.Int,4)
};
//
parameters[0].Value = "7";
parameters[1].Direction = ParameterDirection.Output; //
parameters[2].Direction = ParameterDirection.ReturnValue; //
//
cmd.Parameters.Add(parameters[0]);
cmd.Parameters.Add(parameters[1]);
cmd.Parameters.Add(parameters[2]);
con.Open();
//
Label1.Text = cmd.ExecuteNonQuery().ToString();
con.Close();
//
Label1.Text += "- :" + parameters[1].Value.ToString();
Label1.Text += "- :" + parameters[2].Value.ToString();
}
// GetUserAccountRe2
public void runGetUserAccountRe2()
{
SqlCommand cmd = common("GetUserAccountRe2");
//
IDataParameter[] parameters = {
new SqlParameter("@UserName", SqlDbType.NChar,20) ,
new SqlParameter("@UserID", SqlDbType.Int) ,
new SqlParameter("rval", SqlDbType.Int,4)
};
//
parameters[0].Value = "7";
parameters[1].Direction = ParameterDirection.Output; //
parameters[2].Direction = ParameterDirection.ReturnValue; //
//
cmd.Parameters.Add(parameters[0]);
cmd.Parameters.Add(parameters[1]);
cmd.Parameters.Add(parameters[2]);
con.Open();
//
Label1.Text = cmd.ExecuteNonQuery().ToString();
DataSet ds = new DataSet();
SqlDataAdapter dt = new SqlDataAdapter(cmd);
dt.Fill(ds);
rpt.DataSource = ds;
rpt.DataBind();
con.Close();
//
Label1.Text += "- :" + parameters[1].Value.ToString();
Label1.Text += "- :" + parameters[2].Value.ToString();
}
//
public void runGetUserAccountRe3()
{
DataSet ds = new DataSet();
SqlDataAdapter dt = new SqlDataAdapter(common("GetUserAccountRe3"));
dt.Fill(ds);
rpt1.DataSource = ds.Tables[0].DefaultView;
rpt1.DataBind();
rpt2.DataSource = ds.Tables[1].DefaultView;
rpt2.DataBind();
}
public SqlCommand common(string proName)
{
SqlCommand cmd = new SqlCommand();
// sql
cmd.Connection = con;
//
cmd.CommandText = proName;
//
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}
}
SQLServer 데이터 베 이 스 를 추가 하 는 전역 변수
select APP_NAME ( ) as w --
select @@IDENTITY --
select USER_NAME() --
SELECT @@CONNECTIONS -- SQL 。
SELECT GETDATE() --
SELECT @@CPU_BUSY/100 -- SQL CPU ,
USE tempdb SELECT @@DBTS as w -- timestamp 。 timestamp 。
select @@IDENTITY as w --
SELECT @@IDLE as w -- SQL ,
SELECT @@IO_BUSY AS w -- SQL ,
SELECT @@LANGID AS w -- (ID)。
SELECT @@LANGUAGE AS w --
SELECT @@LOCK_TIMEOUT as w -- , 。
SELECT @@MAX_CONNECTIONS as w -- SQL 。
EXEC sp_configure --
SELECT @@MAX_PRECISION as w -- decimal numeric , 。 38。
select @@OPTIONS as w -- SET 。
SELECT @@PACK_RECEIVED as w -- SQL 。
SELECT @@PACK_SENT as w -- SQ 。
SELECT @@PACKET_ERRORS as w -- SQL , SQL 。
SELECT @@SERVERNAME as w -- SQL 。
SELECT @@SERVICENAME as w -- SQL
SELECT @@TIMETICKS as w -- SQL
SELECT @@TOTAL_ERRORS AS w -- SQL , / 。
SELECT @@TOTAL_READ as w -- SQL 。
SELECT @@TOTAL_WRITE as w -- SQL 。
SELECT @@TRANCOUNT as w -- 。
SELECT @@VERSION as w -- SQL 、 。
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.