Pergunta

Eu li esta questão sobre como obter o identidade de uma linha inserida. A minha pergunta é tipo de relacionados.

Existe uma maneira de obter o guid para uma linha inserida? A tabela Eu estou trabalhando com tem um guid como chave primária (padrão para newid), e eu gostaria de recuperar que guid depois de inserir a linha.

Há algo como @@IDENTITY, IDENT_CURRENT ou SCOPE_IDENTITY para Guids?

Foi útil?

Solução

Você pode usar a funcionalidade de saída para repor os valores predefinidos para trás em um parâmetro.

CREATE TABLE MyTable
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(),
    MyColumn1 NVARCHAR(100),
    MyColumn2 NVARCHAR(100)
)

DECLARE @myNewPKTable TABLE (myNewPK UNIQUEIDENTIFIER)

INSERT INTO 
    MyTable
(
    MyColumn1,
    MyColumn2
)
OUTPUT INSERTED.MyPK INTO @myNewPKTable
VALUES
(
    'MyValue1',
    'MyValue2'
)

SELECT * FROM @myNewPKTable

Eu tenho que dizer, porém, ter cuidado usando um identificador único como uma chave primária. Indexação em um GUID é o desempenho extremamente pobre como quaisquer guids recém-gerado terá que ser inserido no meio de um índice e rrarely apenas adicionado no final. Há nova funcionalidade no SQL2005 para NEWSEQUENTIALID (). Se obscuridade não é necessário com seus Guids então sua uma alternativa possível.

Outras dicas

Outra abordagem mais limpo, se a inserção de uma única linha

CREATE TABLE MyTable
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(),
    MyColumn1 NVARCHAR(100),
    MyColumn2 NVARCHAR(100)
)

DECLARE @MyID UNIQUEIDENTIFIER;
SET @MyID = NEWID();

INSERT INTO 
    MyTable
(
    MyPK
    MyColumn1,
    MyColumn2
)
VALUES
(
    @MyID,
    'MyValue1',
    'MyValue2'
)

SELECT @MyID;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top