Eu tenho pesquisado no banco de dados AdventureWorks2012 e vejo Row_GUID usado em várias tabelas.
Existem 2 partes na minha pergunta:
Quando devo incluir uma coluna Row_GUID?
Quais são os usos e benefícios de uma coluna Row_GUID?
Eu tenho pesquisado no banco de dados AdventureWorks2012 e vejo Row_GUID usado em várias tabelas.
Existem 2 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ário paraFILESTREAM
, mas pode ser usado em qualquer cenário em que você deseja uma coluna imutável separada da chave primária (por exemplo, no caso em que um valor de chave primária pode mudar, mas você ainda deseja ser capaz de dizer qual linha era qual antes e depois da alteração).Agora, se a replicação, ou sua aplicação, ou o que você estiver prestando atenção, vai notar que:
Veja aqui , aqui , e a seção "Considerações sobre Instantâneos" aqui para mais informações.
Marcar uma coluna como
ROWGUIDCOL
permite que ela seja referenciada$ROWGUID
nas consultas. Isso permite tornar as consultas mais genéricas, pois você não precisa procurar, em cada tabela, qual é a coluna "única" (isso é bastante útil para recursos como Replicação e FileStream conforme observado por @Aaron e @Martin, respectivamente ). Você pode ter uma consulta construída na camada do aplicativo, ou mesmo no SQL dinâmico, que faça algo comoSELECT $ROWGUID AS [ID] FROM {table_name}
e simplesmente itere em uma lista de tabelas.Apenas tenha em mente que a
ROWGUIDCOL
designação não impõe exclusividade. Você ainda precisará impor isso 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 de umAFTER UPDATE
gatilho ou permissõesDENY UPDATE
em nível de coluna para essa coluna.Por exemplo:
Retorna algo semelhante a:
Da mesma forma, pode-se usar
$IDENTITY
para tabelas que possuem umaIDENTITY
coluna.