저장 프로 시저와 뷰의 차이점은 무엇입니까?


138

몇 가지 점에 대해 혼란 스럽습니다.

  1. 저장 프로 시저와 뷰의 차이점은 무엇입니까?

  2. SQL Server에서 언제 저장 프로 시저를 사용하고 언제 뷰를 사용해야합니까?

  3. 뷰를 통해 매개 변수를 전달할 수있는 동적 쿼리를 작성할 수 있습니까?

  4. 어느 것이 가장 빠르며 어떤 것이 다른 것보다 빠릅니까?

  5. 뷰 또는 저장 프로 시저가 메모리를 영구적으로 할당합니까?

  6. 누군가가 뷰가 가상 테이블을 생성하고 절차가 재료 테이블을 생성한다고 말하면 무엇을 의미합니까?

더 많은 포인트가 있으면 알려주세요.

답변:


144

뷰는 가상 테이블을 나타냅니다 . 뷰에서 여러 테이블을 조인하고 뷰를 사용하여 데이터가 단일 테이블에서 온 것처럼 데이터를 표시 할 수 있습니다.

저장 프로시 저는 매개 변수를 사용하여 데이터를 업데이트 및 삽입하거나 단일 값 또는 데이터 세트를 반환하는지 여부에 관계없이 기능을 수행합니다.

뷰 및 저장 프로 시저 만들기 -각각의 사용시기와 이유에 대한 Microsoft의 정보가 있습니다.

두 개의 테이블이 있다고 가정 해보십시오.

  • tbl_user, 열 : user_id, user_name,user_pw
  • tbl_profile, 열 : profile_id, user_id,profile_description

따라서 모든 SQL 조각에서 조인을 수행하는 대신 해당 테이블에서 많은 쿼리를 발견하면 다음과 같은 뷰를 정의합니다.

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

따라서 나중에 쿼리 profile_description를 원하면 다음과 같이하면 됩니다 user_id.

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

이 코드는 다음과 같은 저장 프로 시저에서 사용될 수 있습니다.

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

따라서 나중에 전화 할 수 있습니다.

dbo.getDesc 25

그리고 user_id25에 대한 설명을 얻을 것 25입니다.

분명히 더 많은 세부 사항이 있습니다. 이것은 기본 아이디어 일뿐입니다.


1
그러나 조인은 매개 변수를 제공 할 필요가없는 저장 프로 시저에서 여러 테이블을 조인 할 수 있습니다.
NoviceToDotNet

5
근데 왜 하시겠습니까? 무엇을 이루려고 노력하고 있습니까? 저장 프로시 저는 작업을 수행하기위한 것입니다.보기는 인생을 더 쉽게 만들기위한 것입니다.
Patrick

1
뷰를 저장된 쿼리로 생각하면 작업을 수행하기 위해 많은 조인을해야하는 테이블이 두 개인 경우, 작업 할 뷰를 만들어 항상 조인 할 필요가 없습니다.
Patrick

2
얻지 못했습니다. 조금 더 설명해주세요.
NoviceToDotNet

2
맞지만 뷰를 저장하면 단일 테이블처럼 호출 할 수 있습니다. 그렇게하면 조인을 한 번 만들 수 있으며 나중에 사용할 때는 기본 SQL을 테이블처럼 마치는 뷰를 직접 참조합니다.
Patrick

107

많은 정보가 여기에 있습니다

다음은 좋은 요약입니다.

저장 프로 시저 :

  • 매개 변수를 받아들입니다
  • 더 큰 쿼리에서 빌딩 블록으로 사용할 수 없습니다
  • 여러 명령문, 루프, IF ELSE 등을 포함 할 수 있습니다.
  • 하나 또는 여러 테이블을 수정할 수 있습니다
  • INSERT, UPDATE 또는 DELETE 문의 대상으로 사용할 수 없습니다.

관점:

  • 않습니다 NOT 매개 변수를 허용
  • 더 큰 쿼리에서 빌딩 블록으로 사용할 수 있습니다
  • 하나의 SELECT 쿼리 만 포함 할 수 있습니다
  • 테이블을 수정할 수 없습니다
  • 그러나 때로는 INSERT, UPDATE 또는 DELETE 문의 대상으로 사용할 수도 있습니다.

6
또한 Views는 "order by"또는 "top"절을 포함하지 않아야합니다
sksallaj

2
"INSERT, UPDATE 또는 DELETE 문의 대상으로 사용할 수 없습니다"는 무슨 뜻입니까? 스토어드 프로 시저에서 INSERT, DELETE, UPDATE를 사용할 수 없습니까?
Arsman Ahmad

"보기, 매개 변수를 허용하지 않습니다", 사실이 아닙니까? 동영상 예 : youtube.com/watch?v=zK-mWjUxKpw
xayer

뷰는 기본 테이블 / 테이블을 수정할 수 있습니다. csharp-video-tutorials.blogspot.com/2012/09/…
Khurram

8

먼저 둘 다 다르다는 것을 이해해야합니다. 진술에 Stored Procedures가장 적합 INSERT-UPDATE-DELETE합니다. 반면 Views에 사용되는SELECT진술 . 둘 다 사용해야합니다.

뷰에서는 데이터를 변경할 수 없습니다. 일부 데이터베이스는 당신이 사용할 수있는 업데이트 가능한 뷰가 INSERT-UPDATE-DELETE에를 Views.


2
뷰를 사용하여 기본 테이블의 데이터를 변경할 수 있습니다. 뷰를 업데이트 할 수 있습니다.
Dot Net 개발자

7

SQL 뷰는 가상 테이블이며 SQL SELECT 쿼리를 기반으로합니다. 뷰는 하나 이상의 기존 데이터베이스 테이블 또는 다른 뷰를 참조합니다. 저장 프로시 저는 단일 실행 계획으로 컴파일 된 Transact-SQL 문의 그룹이지만 데이터베이스의 스냅 샷입니다.

뷰는 데이터베이스 테이블에 저장된 데이터를 간단히 보여주는 반면 저장 프로시 저는 실행할 수있는 명령문 그룹입니다.

스토어드 프로 시저가 SQL 문을 실행하는 동안 참조 된 테이블의 데이터를 표시하므로 뷰가 더 빠릅니다.

이 기사를 확인하십시오 : 보기 및 저장 프로 시저 . 정확히 당신이 찾고있는 것


5

보기는 복잡한 것을 저장하는 간단한 방법입니다 SELECT 데이터베이스에 입니다.

단순한 SQL로 충분하지 않은 경우 저장 프로 시저가 사용됩니다. 저장 프로 시저에는 변수, 루프 및 다른 저장 프로 시저에 대한 호출이 포함됩니다. 쿼리 언어가 아닌 프로그래밍 언어입니다.

  1. 뷰는 정적입니다. 그것들을 특정 레이아웃을 가진 새로운 테이블로 생각하면 그 테이블의 데이터는 생성 한 쿼리를 사용하여 즉시 생성됩니다. 모든 SQL 테이블과 마찬가지로 WHERE, GROUP BY및로 정렬하고 필터링 할 수 있습니다 ORDER BY.

  2. 당신이하는 일에 달려 있습니다.

  3. 데이터베이스에 따라 다릅니다. 간단한 뷰는 쿼리를 실행하고 결과를 필터링합니다. 그러나 Oracle과 같은 데이터베이스는 기본적으로보기의 기본 데이터가 변경 될 때 자동으로 업데이트되는 테이블 인 "구체화 된"보기를 작성할 수 있습니다.

    구체화 된 뷰를 사용하면 뷰의 열 (특히 데이터베이스의 어디에도 존재하지 않는 계산 된 열)에 인덱스를 만들 수 있습니다.

  4. 나는 당신이 무슨 말을하는지 이해하지 못합니다.


5

위의 의견 외에도 뷰에 대한 몇 가지 사항을 추가하고 싶습니다.

  1. 보기를 사용하여 복잡성을 숨길 수 있습니다. 5 명이 한 프로젝트에서 작업하고 있지만 그 중 한 명만이 복잡한 조인과 같은 데이터베이스에 능숙한 시나리오를 상상해보십시오. 이러한 시나리오에서 다른 팀 구성원이 단일 테이블을 조회 할 때 쉽게 조회 할 수있는보기를 작성할 수 있습니다.
  2. 뷰로 보안을 쉽게 구현할 수 있습니다. Salary , SSN number 와 같은 민감한 열을 포함 하는 Table Employee 를 가정 해 봅시다 . 이 열은 열을 볼 권한이없는 사용자에게는 보이지 않습니다. 이 경우 민감한 열 (이전에 언급 한 Salary 등)을 노출시키지 않고 Name , Age 등과 같은 권한이 필요없는 테이블에서 열을 선택하는 View를 만들 수 있습니다 . 이제 Employee 테이블을 직접 쿼리 할 수있는 권한을 제거 하고 View에 대한 읽기 권한 만 유지할 수 있습니다. 이런 식으로 뷰를 사용하여 보안을 구현할 수 있습니다.

4
  1. VIEW는 "WHERE"-Clause를 사용할 수있는 동적 쿼리입니다.
  2. 저장 프로시 저는 미리 정의 된 결과를 반환하는 고정 데이터 선택입니다
  3. 뷰도 저장 프로시 저도 메모리를 할당하지 않습니다. 구체화 된 뷰만
  4. TABLE은 하나의 ENTITY이며,보기는 다른 ENTITIES 또는 TABLES에서 데이터를 수집 할 수 있습니다.

4

Mahesh는 뷰에서 데이터를 변경할 수 없다고 제안 할 때 정확하지 않습니다. 패트릭의 관점에서

CREATE View vw_user_profile AS 
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id

나는 데이터를 업데이트 할 수 있습니다 ... 예를 들어 이들 중 하나를 수행 할 수 있습니다 ...

Update vw_user_profile Set profile_description='Manager' where user_id=4

또는

Update tbl_profile Set profile_description='Manager' where user_id=4

모든 테이블의 모든 필드가 존재하지는 않으며 PROFILE_ID가 기본 키이고 NULL 일 수 없다고 가정하므로이 뷰에 삽입 할 수 없습니다. 그러나 때로는 뷰에 삽입 할 수 있습니다 ...

...를 사용하여 기존 테이블에서 뷰를 만들었습니다.

Create View Junk as SELECT * from [TableName]

그때

Insert into junk (Code,name) values 
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')

DELETE from Junk Where ID>4

이 경우 INSERT와 DELETE가 모두 작동했습니다.

분명히 집계 또는 계산 된 필드는 업데이트 할 수 없지만 직선보기 인보기는 업데이트 할 수 있어야합니다.

보기에 둘 이상의 테이블이 포함 된 경우 삽입하거나 삭제할 수 없지만보기가 하나의 테이블의 서브 세트 인 경우 일반적으로 수행 할 수 있습니다.


3

가장 큰 차이점은 뷰를 쿼리 할 때 정의가 쿼리에 붙여진다는 것입니다. 프로시 저는 쿼리 결과도 제공 할 수 있지만 컴파일되어 더 빠릅니다. 또 다른 옵션은 인덱싱 된 뷰입니다.


1

@ 패트릭은 자신이 말한 내용에 맞지만 뷰에 대한 다른 질문에 대답하기 위해 뷰는 메모리에서 자체적으로 생성되며, 조인, 데이터의 유형 및 집계가 수행되면 메모리가 많이 걸리는 뷰가 될 수 있습니다.

저장 프로시 저는 Temp Hash Table (예 : # tmpTable1)을 사용하거나 @ tmpTable1을 사용하는 메모리에서 모든 처리를 수행합니다. 하고 싶은 말에 따라.

저장 프로시 저는 함수와 비슷하지만 이름으로 직접 호출됩니다. 실제로 쿼리 자체에서 사용되는 함수 대신.

많은 데이터를 검색하지 않으면 메모리 테이블이 대부분 더 빠릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.