avec l'option nolock dans l'option QueryBuilder ?Existe-t-il une option pour exécuter Query Builder, y compris une instruction "with nolock" pour ne pas bloquer une base de données pendant une longue extraction de données ? La copie du SQL généré par QueryBuilder dans une fenêtre de script et l'ajout de "with nolock" produisaient une erreur.
Accès aux donnéesRe : avec l'option nolock dans l'option QueryBuilder ?Il semble que vous ayez envoyé le message "With(NOLOCK)" à JMP, et non à la base de données.Assurez-vous qu'il fait partie du T-SQL que vous envoyez à la base de données, comme ceci :
Open Database(cnxn_string, "SELECT * FROM example WITH (NOLOCK)");

Re : avec l'option nolock dans l'option QueryBuilder ?Merci pour la réponse! Je joins un exemple de mon code. Je ne sais pas comment envoyer le with (nolock) à la base de données plutôt qu'à JMP ? JMP ne transmet-il pas ce qui est saisi à la base de données ?
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>Re : avec l'option nolock dans l'option QueryBuilder ?Connection( "ODBC:DSN=<ENTERDSN>;PWD=<ENTERPASSWORD>, With (nolock)" ),</ENTERPASSWORD></ENTERDSN>
Lorsque j'ai ajouté with (nolock) dans la chaîne de connexion, j'étais toujours en mesure d'extraire les données, mais je ne suis pas sûr que with (nolock) ait réellement empêché le verrouillage de la table). Pensées?
Re : avec l'option nolock dans l'option QueryBuilder ?J'ai essayé quelque chose de similaire, et il ne semble pas passer l'option NOLOCK à SQL Server.Quand j'utilise New SQL Query(), j'utilise CustomSQL, comme ceci :
New SQL Query(
Connection( cnxn_string ),
QueryName( "Important Query" ),
CustomSQL( "SELECT * FROM example WITH (NOLOCK) WHERE [Column 2] > 1" )
) << Run;

Je ne suis pas sûr qu'il existe un moyen d'envoyer l'option NOLOCK sans utiliser CustomSQL dans New SQL Query() ou en utilisant la fonction Open Database().
*modifier*
Si vous utilisez le message <
Re : avec l'option nolock dans l'option QueryBuilder ?Je pense que nous y sommes presque. J'ai essayé votre suggestion dans CustomSQL, mais j'obtiens l'erreur suivante :
Erreur lors de l'exécution de la requête SQL :
[Microsoft][ODBC SQL Server Driver][SQL Server]Vous ne pouvez spécifier le verrou READPAST que dans les niveaux d'isolation READ COMMITTED ou REPEATABLE READ. [SQLSTATE=42000]
Existe-t-il un moyen de modifier le niveau d'isolement afin que (nolock) puisse être utilisé?
Ou est-ce que (readpast) accomplit ce dont j'ai besoin (assurez-vous que la production n'est pas bloquée pour accéder/modifier la table pendant que ma requête est en cours d'exécution) ?
Re : avec l'option nolock dans l'option QueryBuilder ?Vous pouvez préfixer l'intégralité de l'instruction SQL avec "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"
ou
"SET TRANSACTION LEVEL REPEATABLE READ"
De Microsoft : ( lien vers la page)
LIRE ENGAGÉ :
Spécifie que les instructions ne peuvent pas lire les données qui ont été modifiées mais non validées par d'autres transactions. Cela empêche les lectures sales. Les données peuvent être modifiées par d'autres transactions entre des instructions individuelles dans la transaction en cours, ce qui entraîne des lectures non répétables ou des données fantômes. Cette option est la valeur par défaut de SQL Server.
LECTURE RÉPÉTABLE :
Spécifie que les instructions ne peuvent pas lire les données qui ont été modifiées mais pas encore validées par d'autres transactions et qu'aucune autre transaction ne peut modifier les données qui ont été lues par la transaction en cours tant que la transaction en cours n'est pas terminée.
Ainsi, WITH(NOLOCK) est fondamentalement identique à READ UNCOMMITTED, mais cela n'a pas d'importance, car WITH(NOLOCK) remplacera READ COMMITTED ou 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;

Re : avec l'option nolock dans l'option QueryBuilder ?J'apprécie les réponses continues.
"SET TRANSACTION LEVEL REPEATABLE READ" génère une erreur de syntaxe.
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED" ne génère pas d'erreur de syntaxe. Cependant, il ne semble pas que WITH(NOLOCK) remplacera READ COMMITTED ou REPEATABLE READ car j'obtiens l'erreur suivante dans le journal : Erreur lors de l'exécution de la requête SQL :
[Microsoft][ODBC SQL Server Driver][SQL Server]Vous ne pouvez spécifier le verrou READPAST que dans les niveaux d'isolation READ COMMITTED ou REPEATABLE READ. [SQLSTATE=42000]
Je suis à court d'idées pour celui-ci.
Re : avec l'option nolock dans l'option QueryBuilder ?Vous ne disposez peut-être pas des autorisations nécessaires pour définir le niveau d'isolement.Pouvez-vous exécuter le T-SQL suivant ?
Options utilisateur DBCC
Si vous le pouvez, il vous indiquera le niveau d'isolement par défaut et vous pourrez décider si NOLOCK est nécessaire.

Plus d'informations sur ces options auprès de Microsoft ici .Étant donné que NOLOCK autorise les lectures modifiées (modifications qui ne sont pas validées dans la base de données et qui peuvent être annulées ou modifiées à nouveau), MS suggère ce qui suit :
Vous pouvez minimiser les conflits de verrouillage tout en protégeant les transactions contre les lectures erronées de modifications de données non validées en utilisant l'une des méthodes suivantes :
Le niveau d'isolement READ COMMITTED avec le READ_COMMITTED_SNAPSHOT option de base de données activée.
Le INSTANTANÉ niveau d'isolement.
Vous finirez par régler ce problème.