하지만 특정 경우에 대해서는 데이터 변경이 가능하여 이 부분에 대해서 소개드립니다.
길게 이야기할 필요 없이 바로 테스트를 진행해보도록 하겠습니다.
1. 테스트 환경 셋팅
--@@ Orig 데이터베이스 생성
IF DB_ID('Orig') IS NOT NULL
DROP DATABASE [Orig]
GO
CREATE DATABASE [Orig]
ON PRIMARY ( NAME = N'Orig', FILENAME = N'D:\Orig.mdf')
GO
USE [Orig]
GO
IF OBJECT_ID('dbo.TestTable', 'U') IS NOT NULL
DROP TABLE dbo.TestTable
GO
--@@ 사용자 테이블 생성
CREATE TABLE dbo.TestTable (Col1 int)
GO
IF OBJECT_ID('dbo.UpdView', 'V') IS NOT NULL
DROP VIEW dbo.UpdView
GO
--@@ 뷰 생성
CREATE VIEW dbo.UpdView
AS
SELECT Col1
FROM Orig.dbo.TestTable
GO
--@@ 테스트 데이터 입력
INSERT INTO dbo.TestTable (Col1) VALUES (1)
GO
IF DB_ID('Orig_Snapshot') IS NOT NULL
DROP DATABASE [Orig_Snapshot]
GO
--@@ 스냅샷 생성
CREATE DATABASE [Orig_Snapshot]
ON PRIMARY ( NAME = N'Orig', FILENAME = N'D:\Orig_Snapshot.ss') AS SNAPSHOT OF [Orig]
GO
2. 테스트 진행
--@@ 스냅샷 데이터베이스로 이동
USE [Orig_Snapshot]
GO
--@@ 현재 데이터 확인
SELECT * FROM dbo.UpdView
GO
--@@ 데이터 입력
INSERT INTO dbo.UpdView VALUES (2), (3);
GO
--@@ 데이터 변경
UPDATE dbo.UpdView SET Col1 = 99 WHERE Col1 = 3;
GO
--@@ 데이터 삭제
DELETE FROM dbo.UpdView
WHERE Col1 = 1;
GO
-- @@ 데이터 변경내용 조회
SELECT * FROM dbo.UpdView;
GO
3. 결론/의견
> View 구문 내에 데이터베이스명을 적어준 부분으로 인하여 이러한 현상이 발생하는 것입니다.
뷰를 만들 때 from 절에 데이터베이스명을 명시해주면 스냅샷 데이터베이스에서 뷰를 조회하더라도
실제 DB에서 데이터를 가지고 옵니다. (당연히도)
> 프로시져도 마찬가지로 동작할 것이기 때문에 스냅샷 데이터베이스를 사용할 경우 주의가 필요할 것 같습니다.
> 잘 사용하면 스냅샷 데이터베이스 활용성을 높일 수 있는 반면에 이해가 없이 사용할 경우 문제가 되어질 수
있으니 알아두시는 것이 좋을 듯 합니다.
출처. Successfully execute an INSERT, UPDATE and DELETE against a Database Snapshot