con l'opzione nolock nell'opzione QueryBuilder?Esiste un'opzione per eseguire Query Builder includendo un'istruzione "with nolock" per non legare un database durante un lungo pull di dati? La copia dell'SQL generato da QueryBuilder in una finestra di script e l'aggiunta di "with nolock" ha prodotto un errore.
Accesso ai datiRi: con l'opzione nolock nell'opzione QueryBuilder?Sembra che tu abbia inviato il messaggio "With(NOLOCK)" a JMP, invece che al database.Assicurati che faccia parte del T-SQL che stai inviando al database, in questo modo:
Open Database(cnxn_string, "SELECT * FROM example WITH (NOLOCK)");

Ri: con l'opzione nolock nell'opzione QueryBuilder?Grazie per la risposta! Ho allegato un esempio del mio codice. Non sono sicuro di come inviare con (nolock) al database anziché a JMP? JMP non trasmette ciò che è stato inserito nel database?
New SQL Query(
Version( 130 ),
Connection( "ODBC:DSN=<ENTERDSN>;PWD=<ENTERPASSWORD>" ),
QueryName( "testquery" ),
Select(
Column( "colname1", "t1" ),
Column( "colname2", "t1" ),
Column(
"colname3",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
),
Column( "colname4", "t1" )
),
From( Table( "table1", Schema( "dbname" ), Alias( "t1" ) ) ),
Where(
GE(
Column(
"colname3",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
),
3772915200,
UI( Comparison( Base( "Continuous" ) ) )
) & In List(
Column( "colname4", "t1" ),
{"col4val"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
),
With( nolock )
) << Run; </ENTERPASSWORD></ENTERDSN>Ri: con l'opzione nolock nell'opzione QueryBuilder?Connection( "ODBC:DSN=<ENTERDSN>;PWD=<ENTERPASSWORD>, With (nolock)" ),</ENTERPASSWORD></ENTERDSN>
Quando ho aggiunto con (nolock) nella stringa di connessione ero ancora in grado di estrarre i dati, ma non sono sicuro che con (nolock) abbia effettivamente impedito il blocco della tabella). Pensieri?
Ri: con l'opzione nolock nell'opzione QueryBuilder?Ho provato qualcosa di simile e non sembrava passare l'opzione NOLOCK a SQL Server.Quando utilizzo New SQL Query(), utilizzo CustomSQL, in questo modo:
New SQL Query(
Connection( cnxn_string ),
QueryName( "Important Query" ),
CustomSQL( "SELECT * FROM example WITH (NOLOCK) WHERE [Column 2] > 1" )
) << Run;

Non sono sicuro che ci sia un modo per inviare l'opzione NOLOCK senza utilizzare CustomSQL all'interno di New SQL Query() o utilizzando la funzione Open Database().
*modificare*
Se usi il messaggio <
Ri: con l'opzione nolock nell'opzione QueryBuilder?Penso che ci siamo quasi. Ho provato il tuo suggerimento in CustomSQL, ma ottengo il seguente errore:
Errore durante l'esecuzione della query SQL:
[Microsoft][Driver ODBC SQL Server][SQL Server]È possibile specificare solo il blocco READPAST nei livelli di isolamento READ COMMITTED o REPEATABLE READ. [SQLSTATE=42000]
C'è un modo per modificare il livello di isolamento in modo da poter utilizzare (nolock)?
Oppure con (readpast) realizza ciò di cui ho bisogno (assicurati che la produzione non sia bloccata dall'accesso/modifica della tabella mentre la mia query è in esecuzione)?
Ri: con l'opzione nolock nell'opzione QueryBuilder?È possibile anteporre l'intera istruzione SQL con "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"
O
"IMPOSTA LETTURA RIPETIBILE A LIVELLO DI TRANSAZIONE"
Da Microsoft: ( link alla pagina)
LEGGI IMPEGNATO:
Specifica che le istruzioni non possono leggere i dati che sono stati modificati ma non confermati da altre transazioni. Questo impedisce letture sporche. I dati possono essere modificati da altre transazioni tra singole istruzioni all'interno della transazione corrente, risultando in letture non ripetibili o dati fantasma. Questa opzione è l'impostazione predefinita di SQL Server.
LETTURA RIPETIBILE:
Specifica che le istruzioni non possono leggere i dati che sono stati modificati ma non ancora confermati da altre transazioni e che nessun'altra transazione può modificare i dati che sono stati letti dalla transazione corrente fino al completamento della transazione corrente.
Quindi WITH(NOLOCK) è fondamentalmente uguale a READ UNCOMMITTED, ma non importa, perché WITH(NOLOCK) sovrascriverà READ COMMITTED o REPEATABLE READ.
New SQL Query(
Connection( cnxn_string ),
QueryName( "Important Query" ),
CustomSQL( "SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM test1.dbo.example WITH(NOLOCK)
WHERE [Column 2] > 0.5" )
) << Run;

Ri: con l'opzione nolock nell'opzione QueryBuilder?Apprezzo le continue risposte.
"SET TRANSACTION LEVEL REPEATABLE READ" genera un errore di sintassi.
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED" non genera un errore di sintassi. Tuttavia, non sembra che WITH(NOLOCK) sovrascriverà READ COMMITTED o REPEATABLE READ poiché ottengo il seguente errore nel registro: Error running SQL Query:
[Microsoft][Driver ODBC SQL Server][SQL Server]È possibile specificare solo il blocco READPAST nei livelli di isolamento READ COMMITTED o REPEATABLE READ. [SQLSTATE=42000]
Sto finendo le idee per questo.
Ri: con l'opzione nolock nell'opzione QueryBuilder?Forse non hai le autorizzazioni per impostare il livello di isolamento.Puoi eseguire il seguente T-SQL?
Opzioni utente DBCC
Se puoi, ti dirà il livello di isolamento predefinito e puoi decidere se è necessario NOLOCK.

Ulteriori informazioni su queste opzioni da Microsoft Qui .Poiché NOLOCK consente letture sporche (modifiche che non vengono salvate nel database e possono essere ripristinate o modificate di nuovo), MS suggerisce quanto segue:
È possibile ridurre al minimo la contesa di blocco proteggendo le transazioni dalle letture sporche di modifiche ai dati senza commit utilizzando uno dei seguenti:
Il livello di isolamento READ COMMITTED con il READ_COMMITTED_SNAPSHOT opzione database impostata su ON.
IL ISTANTANEA livello di isolamento.
Alla fine lo risolverai.