none
Lock esclusivo su una Tabella durante l'esecuzione di una Stored Procedure RRS feed

  • Discussione generale

  • Salve a tutti,

    Vi presento il mio problema:

    - Ho una macchina Win Server con installato SQL Server 2008 R2, in cui c'è un Database DB1 ed una specifica tabella 'OrdCliTest'

    - Ho anche una macchina con Linux, nella stessa LAN, qui c'è un Server MySQL con un Database DB2, copia esatta di DB1

    - Nella macchina Win Server, nel Database DB1 c'è una stored che allinea la tabella OrdCliTest con la stessa Tabella nella macchina Linux, mediante un Linked Server nella macchina Win Server e con operazioni del tipo OPENQUERY.

    - La Tabella OrdCliTest su Win Server ha una chiave ID autoincrementale, la stessa Tabella in Linux ha il campo chiave ID di tipo non incrementale, ed i valori sono assegnati manualmente a partire da un milione

    - Nella stored durante la fase di allineamento, temporaneamente consento l'inserimento degli Id in modo esplicito, tramite l'istruzione SET IDENTITY_INSERT OrdCliTest ON per poi disattivarla a fine stored, così :

    CREATE PROCEDURE [dbo].[sp_Get_From_MySQL]

    AS

    BEGIN

        SET IDENTITY_INSERT OrdCliTest ON;
        SELECT @Reseed = MAX(Id) FROM OrdClitest WHERE Id < 10E6

        INSERT INTO OrdCliTest ... FROM OPENQUERY(TOMYSQL, 'SELECT * FROM OrdCliTest') AS OCT WHERE OCT.Id = @IdOrdine ;    

        SET IDENTITY_INSERT OrdCliTest OFF;
        DBCC CHECKIDENT('OrdCliTest', RESEED, @Reseed)

    END

    Il problema nasce quando durante l'esecuzione della stored, se io inserisco dati dalla mia applicazione dati su OrdCliTest,

    voglio trovare necessariamente SET IDENTITY_INSERT OrdCliTest OFF, la domanda è questa :

    Come faccio a bloccare con un LOCK la tabella OrdCliTest durante l'esecuzione della stored in modo da evitare conflitti nell'inserimento degli Id in OrdCliTest?

    Grazie per eventuali suggerimenti


    • Modificato AngeloNew giovedì 22 gennaio 2015 17:41
    giovedì 22 gennaio 2015 17:40

Tutte le risposte