sql >> データベース >  >> RDS >> Sqlserver

挿入されたレコードは常に連続した ID 値を受け取りますか

    私は受け入れられた答えに同意しません。これは、以下を実行することで簡単にテストおよび反証できます。

    セットアップ

    USE tempdb
    
    CREATE TABLE Foo
    (
        ID int IDENTITY(1,1),
        Data nvarchar(max)
    )
    

    接続 1

    USE tempdb
    
    SET NOCOUNT ON
    WHILE NOT EXISTS(SELECT * FROM master..sysprocesses WHERE context_info = CAST('stop' AS VARBINARY(128) ))
     BEGIN
     INSERT INTO Foo (Data)
     VALUES ('blah')
     END
    

    接続 2

    USE tempdb
    
    SET NOCOUNT ON
    SET CONTEXT_INFO 0x
    
    DECLARE @Output TABLE(ID INT)
    
    WHILE 1 = 1
    BEGIN
        /*Clear out table variable from previous loop*/
        DELETE FROM  @Output
    
        /*Insert 1000 records*/
        INSERT INTO Foo (Data)
        OUTPUT inserted.ID INTO @Output
        SELECT TOP 1000 NEWID()
        FROM sys.all_columns
    
        IF EXISTS(SELECT * FROM @Output HAVING MAX(ID) - MIN(ID) <> 999 )
            BEGIN
            /*Set Context Info so other connection inserting 
              a single record in a loop terminates itself*/
            DECLARE @stop VARBINARY(128) 
            SET @stop = CAST('stop' AS VARBINARY(128))
            SET CONTEXT_INFO @stop
    
            /*Return results for inspection*/
            SELECT ID, DENSE_RANK() OVER (ORDER BY Grp) AS ContigSection
            FROM 
              (SELECT ID, ID - ROW_NUMBER() OVER (ORDER BY [ID]) AS Grp
               FROM @Output) O
            ORDER BY ID
    
            RETURN
            END
    END
    


    1. ssis での増分ロードの最良の方法

    2. macOS Big Surにアップデートした後、MAMPでPostgreSQLデータベースに接続できません

    3. すべてのテーブルのシーケンスIDpostgreSQLを一括更新する方法

    4. COMMITは何をしますか?