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

SQLServer-UPDATEステートメントを許可する自動インクリメント

    「MicrosoftSQLServer2008の内部:T-SQLクエリ」からのこの問題の解決策

    CREATE TABLE dbo.Sequence(
     val int IDENTITY (10000, 1) /*Seed this at whatever your current max value is*/
     )
    
    GO
    
    CREATE PROC dbo.GetSequence
    @val AS int OUTPUT
    AS
    BEGIN TRAN
        SAVE TRAN S1
        INSERT INTO dbo.Sequence DEFAULT VALUES
        SET @val=SCOPE_IDENTITY()
        ROLLBACK TRAN S1 /*Rolls back just as far as the save point to prevent the 
                           sequence table filling up. The id allocated won't be reused*/
    COMMIT TRAN
    

    または、同じ本の別の方法で範囲を簡単に割り当てることができます。 (これをトランザクションの内部から呼び出すか外部から呼び出すかを検討する必要があります。内部では、最初のトランザクションがコミットされるまで、他の同時トランザクションがブロックされます)

    CREATE TABLE dbo.Sequence2(
     val int 
     )
    
    GO
    
    INSERT INTO dbo.Sequence2 VALUES(10000);
    
    GO
    
    CREATE PROC dbo.GetSequence2
    @val AS int OUTPUT,
    @n as int =1
    AS
    UPDATE dbo.Sequence2 
    SET @val = val = val + @n;
    
    SET @val = @val - @n + 1; 
    


    1. null許容列にPRIMARYKEYを使用してテーブルを作成できるのはなぜですか?

    2. 転送用のデータベースのエクスポート

    3. Entity Frameworkは複数のテーブル名を作成しますが、ビューは単一のテーブル名を想定していますか?

    4. postgreql関数の実行中にトランザクションをコミットする