AdventureWorks2012 데이터베이스를 살펴보고 여러 테이블에서 Row_GUID를 사용하는 것을 확인했습니다.
내 질문에는 두 부분이 있습니다.
언제 Row_GUID 열을 포함시켜야합니까?
Row_GUID 열의 용도와 장점은 무엇입니까?
AdventureWorks2012 데이터베이스를 살펴보고 여러 테이블에서 Row_GUID를 사용하는 것을 확인했습니다.
내 질문에는 두 부분이 있습니다.
언제 Row_GUID 열을 포함시켜야합니까?
Row_GUID 열의 용도와 장점은 무엇입니까?
답변:
ROWGUIDCOL
는 주로 MERGE 복제에 사용 되며에도 필요FILESTREAM
하지만 기본 키와 별도의 불변 열을 원하는 모든 시나리오에서 사용할 수 있습니다 (예 : 기본 키 값이 변경 될 수 있지만 여전히 원하는 경우). 변경 전후의 행을 알 수 있음).
USE tempdb;
GO
CREATE TABLE dbo.example
(
name sysname PRIMARY KEY,
rowguid uniqueidentifier NOT NULL DEFAULT NEWID() ROWGUIDCOL
);
INSERT dbo.example(name) VALUES(N'bob'),(N'frank');
SELECT * FROM dbo.example;
UPDATE dbo.example SET name = N'pat' WHERE name = N'bob';
UPDATE dbo.example SET name = N'bob' WHERE name = N'frank';
SELECT * FROM dbo.example;
DROP TABLE dbo.example;
이제 복제 나 응용 프로그램 또는주의를 기울이고있는 내용은 다음과 같습니다.
열을 다음으로 표시 ROWGUIDCOL
$ROWGUID
쿼리에서 참조 할 수 있도록 합니다. 이렇게하면 각 테이블마다 "고유 한"열이 무엇인지 찾아 볼 필요가 없기 때문에보다 일반적인 쿼리를 만들 수 있습니다. 이는 @Aaron 및 @Martin이 각각 언급 한대로 Replication 및 FileStream과 같은 기능에 매우 유용합니다. ). 앱 계층 또는 동적 SQL에서도 쿼리를 생성하여 SELECT $ROWGUID AS [ID] FROM {table_name}
테이블 목록과 유사 하고 간단하게 반복 할 수 있습니다.
그냥 마음에 계속 ROWGUIDCOL
지정 않습니다 하지 고유성을 적용합니다. 여전히 기본 키, 고유 색인 또는 고유 제한 조건을 통해이를 시행해야합니다. 또한이 옵션으로 열을 변경할 수 없습니다. 이를 위해서는 해당 AFTER UPDATE
열에 대한 트리거 또는 열 수준 권한이 DENY UPDATE
필요합니다.
예를 들면 다음과 같습니다.
SET NOCOUNT ON;
CREATE TABLE #RowGuidColTest
(
ID UNIQUEIDENTIFIER NOT NULL DEFAULT (NEWID()) ROWGUIDCOL,
SomeValue INT
);
INSERT INTO #RowGuidColTest (SomeValue) VALUES (12), (14), (1231);
DECLARE @Search UNIQUEIDENTIFIER;
SELECT TOP (1) @Search = $ROWGUID
FROM #RowGuidColTest;
SELECT @Search AS [@Search]
SELECT *, $ROWGUID AS [$ROWGUID]
FROM #RowGuidColTest;
SELECT *
FROM #RowGuidColTest
WHERE $ROWGUID = @Search;
-- No enforced uniqueness without a PK, Unique Index, or Unique Constraint.
UPDATE tmp
SET $ROWGUID = @Search
FROM #RowGuidColTest tmp
SELECT *
FROM #RowGuidColTest
WHERE $ROWGUID = @Search;
다음과 유사한 것을 반환합니다.
@Search
E7166D18-5003-4D20-8983-E2402472CF82
ID SomeValue $ROWGUID
E7166D18-5003-4D20-8983-E2402472CF82 12 E7166D18-5003-4D20-8983-E2402472CF82
44FD48A4-AF38-41BF-AE4E-8A12D26B5B57 14 44FD48A4-AF38-41BF-AE4E-8A12D26B5B57
2D50C5C7-1E43-4ADA-A03B-ED202FC88D20 1231 2D50C5C7-1E43-4ADA-A03B-ED202FC88D20
ID SomeValue
E7166D18-5003-4D20-8983-E2402472CF82 12
ID SomeValue
E7166D18-5003-4D20-8983-E2402472CF82 12
E7166D18-5003-4D20-8983-E2402472CF82 14
E7166D18-5003-4D20-8983-E2402472CF82 1231
마찬가지로 열 $IDENTITY
이있는 테이블에 사용할 수 있습니다 IDENTITY
.