Venho pesquisando no banco de dados AdventureWorks2012 e veja Row_GUID usado em várias tabelas.
Existem duas partes na minha pergunta:
Quando devo incluir uma coluna Row_GUID?
Quais são os usos e benefícios de uma coluna Row_GUID?
fonte
Venho pesquisando no banco de dados AdventureWorks2012 e veja Row_GUID usado em várias tabelas.
Existem duas partes na minha pergunta:
Quando devo incluir uma coluna Row_GUID?
Quais são os usos e benefícios de uma coluna Row_GUID?
ROWGUIDCOL
é usado principalmente para replicação MERGE e também é necessárioFILESTREAM
, mas pode ser usado em qualquer cenário em que você queira uma coluna imutável separada da chave primária (por exemplo, no caso em que um valor de chave primária possa ser alterado, mas você ainda queira capaz de dizer qual linha era qual antes e depois da alteração).
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;
Agora, se a replicação, ou seu aplicativo, ou o que você está prestando atenção, ele notará que:
Veja aqui , aqui e a seção "Considerações sobre instantâneos" aqui para obter mais informações.
Marcar uma coluna como
ROWGUIDCOL
permite que ela seja referenciada$ROWGUID
em consultas. Isso permite tornar as consultas mais genéricas, já que você não precisa procurar, em cada tabela, qual é a coluna "única" (isso é bastante útil para recursos como Replication e FileStream, conforme observado por @Aaron e @Martin, respectivamente ) Você pode ter uma consulta construída na camada do aplicativo, ou mesmo no Dynamic SQL, que faz algo comoSELECT $ROWGUID AS [ID] FROM {table_name}
e simplesmente itera sobre uma lista de tabelas.Lembre-se de que a
ROWGUIDCOL
designação não impõe exclusividade. Você ainda precisará aplicá-lo por meio de uma chave primária, um índice exclusivo ou uma restrição exclusiva. Essa opção também não impõe que a coluna seja imutável. Para isso, você precisaria deAFTER UPDATE
permissõesDENY UPDATE
no nível da coluna ou no gatilho para essa coluna.Por exemplo:
Retorna algo semelhante a:
Da mesma forma, pode-se usar
$IDENTITY
para tabelas que possuem umaIDENTITY
coluna.fonte