저장 프로시저와 보기의 차이점은 무엇입니까?
저는 몇 가지 점에 대해 혼란스럽습니다.
저장 프로시저와 보기의 차이점은 무엇입니까?
SQL Server에서 저장 프로시저를 언제 사용하고 보기를 언제 사용해야 합니까?
보기를 통해 매개 변수를 전달할 수 있는 동적 쿼리를 만들 수 있습니까?
어떤 것이 가장 빠르고 어떤 기준으로 다른 것보다 빠릅니까?
보기 또는 저장 프로시저는 메모리를 영구적으로 할당합니까?
프로시저가 재료 테이블을 만드는 동안 뷰가 가상 테이블을 만든다고 하면 무엇을 의미합니까?
더 많은 포인트가 있다면 알려주시기 바랍니다.
보기는 가상 테이블을 나타냅니다.보기에 여러 테이블을 결합하고 보기를 사용하여 데이터를 단일 테이블에서 가져온 것처럼 표시할 수 있습니다.
저장 프로시저는 매개 변수를 사용하여 기능을 수행합니다...데이터를 업데이트 및 삽입하거나 단일 값 또는 데이터 세트를 반환하는지 여부를 나타냅니다.
보기 및 저장 프로시저 만들기 - 각 보기 및 저장 프로시저를 사용해야 하는 시기와 이유에 대한 Microsoft의 몇 가지 정보가 있습니다.
두 개의 테이블이 있다고 칩시다.
tbl_user있는 : 열포함:user_id,user_name,user_pwtbl_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
그고나는그에대설받것입다니을명을한리▁forription▁desc다것▁the니에 대한 설명을 듣겠습니다.user_id서 25, 거서기.25매개 변수입니다.
분명히 더 많은 세부사항이 있습니다. 이것은 기본적인 아이디어일 뿐입니다.
많은 정보를 여기에서 이용할 수 있습니다.
다음은 좋은 요약입니다.
저장 프로시저:
- 매개 변수를 허용합니다.
- 더 큰 쿼리에서 빌딩 블록으로 사용할 수 없습니다.
- 여러 문, 루프, IFELL 등을 포함할 수 있습니다.
- 하나 이상의 테이블을 수정할 수 있습니다.
- INSERT, UPDATE 또는 DELETE 문의 대상으로 사용할 수 없습니다.
A 보기:
- 매개 변수를 허용하지 않습니다.
- 더 큰 쿼리에서 빌딩 블록으로 사용할 수 있습니다.
- 단일 SELECT 쿼리를 하나만 포함할 수 있습니다.
- 테이블을 수정할 수 없습니다.
- 그러나 때때로 INSERT, UPDATE 또는 DELETE 문의 대상으로 사용할 수 있습니다.
SQL 보기는 SQL SELECT 쿼리를 기반으로 하는 가상 테이블입니다.보기는 하나 이상의 기존 데이터베이스 테이블 또는 다른 보기를 참조합니다.저장 프로시저는 단일 실행 계획으로 컴파일된 Transact-SQL 문 그룹인 반면, 데이터베이스 스냅샷입니다.
보기는 데이터베이스 테이블에 저장된 데이터를 보여주는 단순한 반면 저장 프로시저는 실행할 수 있는 문 그룹입니다.
보기는 참조된 테이블의 데이터를 표시하기 때문에 더 빠르며 저장 프로시저는 SQL 문을 실행합니다.
이 문서를 확인하십시오. View vs Stored Procedures(보기 vs 저장 프로시저). 정확히 무엇을 찾고 있는지 확인하십시오.
먼저, 둘 다 다른 것이라는 것을 이해해야 합니다.Stored Procedures 가장 잘 사용됩니다.INSERT-UPDATE-DELETE진술들.반면에.Views는 에사됩다니에 됩니다.SELECT다 요.당신은 둘 다 사용해야 합니다.
뷰에서는 데이터를 변경할 수 없습니다.
일부 데이터베이스에는 사용할 수 있는 업데이트 가능한 보기가 있습니다.INSERT-UPDATE-DELETEViews.
위의 의견 외에도 뷰에 대한 몇 가지 사항을 추가하고 싶습니다.
- 보기를 사용하여 복잡성을 숨길 수 있습니다.5명이 프로젝트를 진행하고 있지만 그 중 한 명만 복잡한 조인과 같은 데이터베이스 작업을 너무 잘 수행하는 시나리오를 상상해 보십시오.이러한 시나리오에서는 다른 팀 구성원이 단일 테이블을 쿼리할 때 쉽게 쿼리할 수 있는 보기를 작성할 수 있습니다.
- 보안은 View를 통해 쉽게 구현할 수 있습니다.급여, SSN 번호와 같은 중요한 열이 포함된 테이블 직원이라고 가정합니다.이러한 열은 볼 권한이 없는 사용자가 볼 수 없도록 되어 있습니다.이 경우 앞에서 언급한 급여 등의 중요한 열을 노출하지 않고 이름, 나이 등과 같은 인증이 필요 없는 테이블의 열을 선택하여 보기를 만들 수 있습니다.이제 Employee 테이블을 직접 쿼리할 수 있는 권한을 제거하고 View에 대한 읽기 권한만 유지할 수 있습니다.이러한 방식으로 View를 사용하여 보안을 구현할 수 있습니다.
▁a▁complex다▁is▁save를 저장하는 간단한 입니다.SELECT데이터베이스에 있습니다.
저장 프로시저는 단순한 SQL만으로는 충분하지 않을 때 사용됩니다.저장 프로시저에는 변수, 루프 및 다른 저장 프로시저에 대한 호출이 포함됩니다.이것은 프로그래밍 언어이지 쿼리 언어가 아닙니다.
보기는 정적입니다.특정 레이아웃을 가진 새 테이블로 생각하면 해당 테이블에 있는 데이터는 해당 테이블을 만든 쿼리를 사용하여 즉시 생성됩니다.다른 SQL 테이블과 마찬가지로 다음을 사용하여 정렬하고 필터링할 수 있습니다.
WHERE,GROUP BY그리고.ORDER BY.그것은 당신이 무엇을 하느냐에 달려 있습니다.
는 데이터베이스에 따라 다릅니다.단순 보기는 쿼리를 실행하고 결과를 필터링하기만 하면 됩니다.그러나 Oracle과 같은 데이터베이스에서는 기본적으로 뷰의 기본 데이터가 변경될 때 자동으로 업데이트되는 테이블인 "구체화된" 뷰를 만들 수 있습니다.
구체화된 보기를 사용하면 보기의 열(특히 데이터베이스에 없는 계산된 열)에 인덱스를 작성할 수 있습니다.
저는 당신이 무슨 말을 하고 있는지 이해하지 못하겠어요.
뷰에서 데이터를 변경할 수 없다고 제안한 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가 모두 작동했습니다.
집계되거나 계산된 필드는 업데이트할 수 없지만 직선 보기인 모든 보기는 업데이트할 수 있어야 합니다.
보기에 둘 이상의 테이블이 포함된 경우 삽입하거나 삭제할 수 없지만 보기가 한 테이블의 하위 집합인 경우에는 일반적으로 삭제할 수 있습니다.
- VIEW는 "WHERE"-절을 사용할 수 있는 동적 쿼리입니다.
- 저장 프로시저는 미리 정의된 결과를 반환하는 고정 데이터 선택입니다.
- 보기도 저장 프로시저도 메모리를 할당하지 않습니다.구체화된 뷰만
- 테이블은 하나의 엔터티일 뿐이며 뷰는 서로 다른 엔터티 또는 테이블에서 데이터를 수집할 수 있습니다.
주요 차이점은 뷰를 쿼리할 때 뷰의 정의가 쿼리에 붙여넣는다는 것입니다.프로시저는 쿼리 결과를 제공할 수도 있지만 컴파일되어 매우 빠릅니다.또 다른 옵션은 인덱싱된 뷰입니다.
@Patrick이 말한 것은 맞지만, 다른 질문에 답하자면, View는 메모리에 자체적으로 생성되며, Joins, Data의 유형 및 수행된 집계에 따라 상당히 메모리가 부족한 View일 수 있습니다.
저장 프로시저는 TempHashTable1과 같은 TempHashTable1을 사용하거나 @tmpTable1을 사용하는 메모리에서 모든 처리를 수행합니다.당신이 무엇을 하라고 시키느냐에 따라 다릅니다.
저장 프로시저는 함수와 비슷하지만 이름으로 직접 호출됩니다.쿼리 자체 내에서 실제로 사용되는 함수 대신 사용됩니다.
많은 데이터를 검색하지 않는 경우 대부분의 경우 메모리 테이블이 더 빠릅니다.
언급URL : https://stackoverflow.com/questions/5194995/what-is-the-difference-between-a-stored-procedure-and-a-view
'codememo' 카테고리의 다른 글
| Flexbox 항목을 동일한 크기로 만드는 방법 (0) | 2023.07.27 |
|---|---|
| Spring Webflux 대 Vert.x (0) | 2023.07.27 |
| Javascript를 사용하여 비활성화된 특성을 입력 요소에 추가합니다. (0) | 2023.07.27 |
| Asp에서 AJAX를 사용하여 양식을 제출합니다.넷 mvc 4 (0) | 2023.07.27 |
| 예외영구 저장소에서 세션 로드 (0) | 2023.07.27 |