답변:
뷰는 가상 테이블을 나타냅니다 . 뷰에서 여러 테이블을 조인하고 뷰를 사용하여 데이터가 단일 테이블에서 온 것처럼 데이터를 표시 할 수 있습니다.
저장 프로시 저는 매개 변수를 사용하여 데이터를 업데이트 및 삽입하거나 단일 값 또는 데이터 세트를 반환하는지 여부에 관계없이 기능을 수행합니다.
뷰 및 저장 프로 시저 만들기 -각각의 사용시기와 이유에 대한 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_id
25에 대한 설명을 얻을 것 25
입니다.
분명히 더 많은 세부 사항이 있습니다. 이것은 기본 아이디어 일뿐입니다.
많은 정보가 여기에 있습니다
다음은 좋은 요약입니다.
저장 프로 시저 :
관점:
먼저 둘 다 다르다는 것을 이해해야합니다. 진술에 Stored Procedures
가장 적합 INSERT-UPDATE-DELETE
합니다. 반면 Views
에 사용되는SELECT
진술 . 둘 다 사용해야합니다.
뷰에서는 데이터를 변경할 수 없습니다. 일부 데이터베이스는 당신이 사용할 수있는 업데이트 가능한 뷰가 INSERT-UPDATE-DELETE
에를 Views
.
SQL 뷰는 가상 테이블이며 SQL SELECT 쿼리를 기반으로합니다. 뷰는 하나 이상의 기존 데이터베이스 테이블 또는 다른 뷰를 참조합니다. 저장 프로시 저는 단일 실행 계획으로 컴파일 된 Transact-SQL 문의 그룹이지만 데이터베이스의 스냅 샷입니다.
뷰는 데이터베이스 테이블에 저장된 데이터를 간단히 보여주는 반면 저장 프로시 저는 실행할 수있는 명령문 그룹입니다.
스토어드 프로 시저가 SQL 문을 실행하는 동안 참조 된 테이블의 데이터를 표시하므로 뷰가 더 빠릅니다.
이 기사를 확인하십시오 : 보기 및 저장 프로 시저 . 정확히 당신이 찾고있는 것
보기는 복잡한 것을 저장하는 간단한 방법입니다 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가 모두 작동했습니다.
분명히 집계 또는 계산 된 필드는 업데이트 할 수 없지만 직선보기 인보기는 업데이트 할 수 있어야합니다.
보기에 둘 이상의 테이블이 포함 된 경우 삽입하거나 삭제할 수 없지만보기가 하나의 테이블의 서브 세트 인 경우 일반적으로 수행 할 수 있습니다.
@ 패트릭은 자신이 말한 내용에 맞지만 뷰에 대한 다른 질문에 대답하기 위해 뷰는 메모리에서 자체적으로 생성되며, 조인, 데이터의 유형 및 집계가 수행되면 메모리가 많이 걸리는 뷰가 될 수 있습니다.
저장 프로시 저는 Temp Hash Table (예 : # tmpTable1)을 사용하거나 @ tmpTable1을 사용하는 메모리에서 모든 처리를 수행합니다. 하고 싶은 말에 따라.
저장 프로시 저는 함수와 비슷하지만 이름으로 직접 호출됩니다. 실제로 쿼리 자체에서 사용되는 함수 대신.
많은 데이터를 검색하지 않으면 메모리 테이블이 대부분 더 빠릅니다.