복붙노트

[SQL] GUID의 SCOPE_IDENTITY ()?

SQL

GUID의 SCOPE_IDENTITY ()?

SCOPE_IDENTITY의 동등한이있는 경우 누구든지 말해 줄래 () SQL Server에서 기본 키로 GUID를 사용하는 경우?

내가 먼저 GUID를 생성하고 우리가 우리의 기본 키로 순차적 GUID를 사용하는 등의 변수로 저장하지 않습니다.

무엇에 대한 어떤 생각의 마지막에 삽입 GUID 기본 키를 검색하는 가장 좋은 방법은?

해결법

  1. ==============================

    1.당신은 출력을 사용하여 GUID 등을 얻을 수 있습니다. 당신은 또한 여러 레코드를 삽입 할 때이 작동합니다.

    당신은 출력을 사용하여 GUID 등을 얻을 수 있습니다. 당신은 또한 여러 레코드를 삽입 할 때이 작동합니다.

    CREATE TABLE dbo.GuidPk (
        ColGuid uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
        Col2    int              NOT NULL
    )
    GO
    
    DECLARE @op TABLE (
        ColGuid uniqueidentifier
    )
    
    INSERT INTO dbo.GuidPk (
        Col2
    )
    OUTPUT inserted.ColGuid
    INTO @op
    VALUES (1)
    
    SELECT * FROM @op
    
    SELECT * FROM dbo.GuidPk
    

    참고 : SQL 2005의 OUTPUT 절을 탐색

  2. ==============================

    2.기본 키 같은 GUID를 사용하지만 비슷한 결과를 달성하기 위해 OUTPUT 절을 사용할 수있는 경우에는 SCOPE_IDENTITY () 해당이 없다. 당신은 출력 테이블 변수를 사용할 필요가 없습니다.

    기본 키 같은 GUID를 사용하지만 비슷한 결과를 달성하기 위해 OUTPUT 절을 사용할 수있는 경우에는 SCOPE_IDENTITY () 해당이 없다. 당신은 출력 테이블 변수를 사용할 필요가 없습니다.

    CREATE TABLE dbo.GuidTest (
        GuidColumn uniqueidentifier NOT NULL DEFAULT NewSequentialID(),
        IntColumn int NOT NULL
    )
    
    GO
    
    INSERT INTO GuidTest(IntColumn)
    OUTPUT inserted.GuidColumn
    VALUES(1)
    

    당신이 닷넷 클라이언트에서 값을 읽으려면 위의 예는 유용합니다. 그냥 ExecuteScalar는 방법을 사용하는 것이 닷넷에서 값을 읽을 수 있습니다.

    ...
    string sql = "INSERT INTO GuidTest(IntColumn) OUTPUT inserted.GuidColumn VALUES(1)";
    SqlCommand cmd = new SqlCommand(sql, conn);
    Guid guid = (Guid)cmd.ExecuteScalar();
    ...
    
  3. ==============================

    3.당신은) (NEWID를 사용하려면

    당신은) (NEWID를 사용하려면

        declare @id uniqueidentifier
        set @id  = NEWID()
        INSERT INTO [dbo].[tbl1]
               ([id])
         VALUES
               (@id)
    
        select @id
    

    그러나 클러스터 된 인덱스 문제는 GUID에있다. .These 제 아이디어입니다, 기본 키로 사용 GUID 전에 생각이 하나 tooNEWSEQUENTIALID ()를 참조하십시오. :)

  4. ==============================

    4.

    CREATE TABLE TestTable(KEY uniqueidentifier, ID VARCHAR(100), Name VARCHAR(100), Value tinyint);
    Declare @id uniqueidentifier ;  
    DECLARE @TmpTable TABLE (KEY uniqueidentifier);     
    INSERT INTO [dbo].[TestTable]
        ([ID], [Name], Value])           
        OUTPUT INSERTED.KEY INTO @TmpTable           
        VALUES(@ID, @Name, @Value);           
    SELECT @uniqueidentifier = KEY FROM @TmpTable; 
    DROP TABLE TestTable;
    
  5. ==============================

    5.자원으로이 스레드를 사용하여, 나는 트리거 내에서 사용하기 위해 다음 생성 :

    자원으로이 스레드를 사용하여, 나는 트리거 내에서 사용하기 위해 다음 생성 :

    DECLARE @nextId uniqueIdentifier;
    DECLARE @tempTable TABLE(theKey uniqueIdentifier NOT NULL DEFAULT NewSequentialID(), b int);
    INSERT INTO @tempTable (b) Values(@b);
    SELECT @nextId = theKey from @tempTable;
    

    다른 사람이 같은 일을 도울 수 있습니다. 사람이 좋은 아이디어가 아니거나하지 않으면 현명한 성능을 말할 아무것도 나쁜 경우이 있어요.

  6. from https://stackoverflow.com/questions/1509947/scope-identity-for-guids by cc-by-sa and MIT license