시작 저장된 절차에서는 SQL Server

0 Comments

의:그렉 Robidoux|업데이트:2020-07-30|댓글(15)|관련상>저장 프로시저

문제

I have been SQL 을 사용하여 서버를 몇 시간 동안,하지만 모든 코드는 issuedagainst 데이터베이스 응용 프로그램에 포함 된 코드입니다. 나는 할 수 있다는 것을 알고 createstored 절차,그러나 나는지 정확히 어디 있는지를 시작하거나 필요가 있는지 무엇을토가 구현을 저장합니다.,

솔루션

저장 프로 시저는 데이터베이스에 arestored T-SQL 문의 배치가 더 이상 없습니다. 대신하는 데 문제의 여러 문서 응용 프로그램할 수 있는 문제는 하나의 명령을 호출하고 저장 프로시저를 하러면 일괄처의 일을 대신 하나의 문입니다. 또한,이후 코드 isstored 데이터베이스에서 당신할 수 있는 문제 같은 설정 코드고 againeven 에서 다른 응용 프로그램 또는 쿼리를 창입니다. 시작하기 위해이 팁의 나머지 부분에서는 일부를 살펴 봅니다.샘플 저장 프로 시저 및 시작 및 빌드 할 수있는 방법.,

아래 예제는 저장 프로 시저를 만드는 것이 얼마나 간단한 지 보여줍니다. 모든 이러한 예를 사용 theAdventureWorks 데이터베이스하지만,theseexamples 해야 straightforwardthat 적용할 수 있습니다 이 개념은 당신의 자신의 데이터베이스 및 응용 프로그램입니다.

를 들어 1-간단한 저장 프로시저

이 첫 번째 예제에서는 간단한 저장 프로시저는 상위 1recordfrom 은 사람입니다.연락처 테이블.

CREATE PROCEDURE uspGetContact AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact 

후가 만들어를 사용하여 아래의 명령을 실행 저장 프로시저.,이것은 첫 번째 쿼리에서 얻은 결과입니다.

예제 2-저장되는 절차와 매개 변수

이 다음 예에서의 수정입니다 첫 번째 예 하지만 이번 addinga 매개 변수으로 전달되는 절차에 따라 동적으로 레코드를 선택합니다.CREATE PROCEDURE 를 사용하는 대신 ALTER PROCEDURE 를 사용하여 procedurethat 를 먼저 삭제 한 다음 다시 만드는 대신 예제 1 에서 만들었습니다.,

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact WHERE LastName = @LastName 

아래 두 가지 방법으로 저장 프로시저를 실행할 수 있습니다. 첫 번째 예제는우리가 사용하려는 매개 변수 값을 전달하고 두 번째 예제에는 값과 함께 매개 변수 이름도 포함됩니다. 이러한 명령 중 하나를 사용하여 저장 프로 시저를 실행할 수 있습니다.이것은 첫 번째 쿼리의 결과입니다.,

예 3-저장되는 절차와 매개 변수과 출력 매개변수

이 예제에서는 우리는 모두 입력 매개변수뿐만 아니라 출력 매개 변수입니다.출력 매개 변수는 저장 프로 시저에서 조회중인 ContactID 를 다시 전달하는 데 사용됩니다. 그런 다음이 출력 매개 변수를 사용하여 이 사람에 대한 모든 주소 레코드와 함께 person ContactID,FirstName 및 LastName 을 선택합니다.,

다시 말씀드리지만 우리는 우리를 변경하고 저장 프로시저 uspGetContact 다음 두 번째로 우리는 실행하는 다음의 코드를 실행하는 절차 uspGetContact 및 thenbased 에서 반환하는 값은 그것을 얻을 것입니다 또한 쿼리를 위한 사람의 이름과 addressinfo.

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50), @ContactID INT output AS SELECT TOP 1 @ContactID = c.ContactID FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.LastName = @LastName 

후 저장된 절차가 변경되래의 블록의 코드입니다. 이것은 위의 저장 프로 시저를 실행하고 ContactID 에 값이 있으면 사람 및 주소 정보를 반환합니다.이 결과를 얻으려면 다음 단계를 수행해야합니다.,

를 들어 4-저장 프로시저를 사용하 RAISERROR 문

이 예에서 우리는 이 두 가지를 결합하는 단계에서 예를 들어,3 하나로 저장된 절차입니다.첫 번째 단계는 ContactID 를 얻은 다음 절차의 두 번째 부분을 얻는 것입니다.사람 이름과 주소 정보를 조회 할 것입니다. 또한 레코드가 발견되지 않으면 오류를 반환하기 위해 theRAISERROR 문을 사용하는 코드에 추가했습니다. 그런 다음 데이터를 찾을 때 어떻게 보이는지 보여주기 위해 두 번 실행됩니다., RAISERROR 문은 applicationhandles 데이터 또는 발생할 수있는 다른 오류 방법을 제어하는 데 사용할 수 있습니다.

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS DECLARE @ContactID INT SELECT TOP 1 @ContactID = c.ContactID FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.LastName = @LastName IF @@ROWCOUNT > 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END ELSE BEGIN RAISERROR ("No record found",10,1) END 
EXEC uspGetContact @LastName="Walters"

이것은 결과입니다.

EXEC uspGetContact @LastName="Job"

이것은 결과는 데이터가 없을 때 발견했다.

예 5-저장되는 절차는 별도의 부름에 저장 프로시저

여기에 또 다른 예입니다 우리는 두 저장합니다., 첫 번째 저장 프로시저 uspFindContact 조회 첫 번째 레코드가 있는 주소를 기록한 다음 반환합 연락처 id 을 호출하는 저장하는 절차 다시 표시 theperson 및 주소 정보.

CREATE PROCEDURE uspFindContact @LastName NVARCHAR(50), @ContactID INT output AS SELECT TOP 1 @ContactID = c.ContactID FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.LastName = @LastName 

아래 코드는 변경의 uspGetContact 저장 프로시저는 callsuspFindContact 고 레코드 집합을 반환합니다.

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS DECLARE @ContactID INT SET @ContactID = 0 EXEC uspFindContact @, @ OUTPUT IF @ContactID <> 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END ELSE BEGIN RAISERROR ("No record found",10,1) END 
EXEC uspGetContact @LastName="Walters"

이것은 결과입니다.

EXEC uspGetContact @LastName="Job"

이것은 결과입니다.,

예 6-저장 프로시저는 의견

이 마지막 예는 uspGetContact 저장 프로시저가 commentsto 코드는 방법을 볼 수 있도록 주석 작업에 저장되는 절차입니다.

댓글을 만들 수 있습니다 두 가지 방법

  1. 사용하여–
  2. 사용/*시멘트 블록*/end 코멘트 블록입니다.

그 외에는 저장 프로 시저에서 다른 것이 변경되지 않았습니다.,

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS /* This is a sample stored procedure to show how comments work within a stored procedure */ -- declare variable DECLARE @ContactID INT -- set variable value SET @ContactID = 0 -- execute stored proc and return ContactID value EXEC uspFindContact @, @ OUTPUT -- if ContactID does not equal 0 then return data else return error IF @ContactID <> 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END ELSE BEGIN RAISERROR ("No record found",10,1) END 

이것은 매우 간단한 예제이지만,잘하면 이것은 당신에게 아이디어를 제공합의 howeasy 그것은 저장 프로시저를 만들에 대한 SQL Server. Select statementfrom 쿼리 창 또는 응용 프로그램에서 실행할 수있는 경우 위의 그림과 같이 astored procedure 를 쉽게 실행할 수 있습니다.,

다음 단계
  • 지 않는 경우 이미 사용하고 저장 프로시저를 희망이 yousome 통찰력으로 무엇을 시작하기 위해 필요한 그들을 사용하여
  • 으로 언급한 이들은 아주 간단한 예제이지만,그냥 아무것도에 대한 작업을 수행할 수 있습으로 배치의 문으로 결합할 수 있습 저장 프로시저는 다음 사용에 대해 다시 응용 프로그램을 수행합니다.,
  • 체크 저장된 절차는 튜토리얼에 대한 더 많은 예제

최근 업데이트: 2020-07-30

저자에 관하여
그렉 Robidoux 대통령의 엣지우드 솔루션과의 공동 설립자 MSSQLTips.com.
모두 보기 내 팁
관련 자료

  • 더 많은 데이터베이스 개발자 팁입니다…


답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다