con la opción nolock en la opción QueryBuilder?¿Existe una opción para ejecutar Query Builder que incluya una declaración "sin bloqueo" para no vincular una base de datos durante una extracción de datos larga? Copiar el SQL generado por QueryBuilder en una ventana de secuencia de comandos y agregar "sin bloqueo" produjo un error.
Acceso a los datosRe: ¿con la opción nolock en la opción QueryBuilder?Parece que envió el mensaje "Con (NOLOCK)" a JMP, en lugar de a la base de datos.Asegúrese de que sea parte del T-SQL que está enviando a la base de datos, así:
Open Database(cnxn_string, "SELECT * FROM example WITH (NOLOCK)");

Re: ¿con la opción nolock en la opción QueryBuilder?¡Gracias por la respuesta! Adjunto un ejemplo de mi código. No estoy seguro de cómo enviar el with (nolock) a la base de datos en lugar de JMP. ¿JMP no transmite lo que se ingresa a la base de datos?
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: ¿con la opción nolock en la opción QueryBuilder?Connection( "ODBC:DSN=<ENTERDSN>;PWD=<ENTERPASSWORD>, With (nolock)" ),</ENTERPASSWORD></ENTERDSN>
Cuando agregué with (nolock) en la cadena de conexión, aún podía extraer los datos, pero no estoy seguro de si with (nolock) realmente impidió que la tabla se bloqueara). ¿Pensamientos?
Re: ¿con la opción nolock en la opción QueryBuilder?Intenté algo similar y no parecía pasar la opción NOLOCK a SQL Server.Cuando uso New SQL Query(), uso CustomSQL, así:
New SQL Query(
Connection( cnxn_string ),
QueryName( "Important Query" ),
CustomSQL( "SELECT * FROM example WITH (NOLOCK) WHERE [Column 2] > 1" )
) << Run;

No estoy seguro de que haya una manera de enviar la opción NOLOCK sin usar CustomSQL dentro de New SQL Query() o usando la función Open Database().
*editar*
Si usa <
Re: ¿con la opción nolock en la opción QueryBuilder?Creo que ya casi llegamos. Intenté su sugerencia en CustomSQL, pero aparece el siguiente error:
Error al ejecutar la consulta SQL:
[Microsoft][Controlador ODBC para SQL Server][SQL Server]Solo puede especificar el bloqueo READPAST en los niveles de aislamiento de LECTURA COMPROMETIDA o LECTURA REPETIBLE. [SQLSTATE=42000]
¿Hay alguna manera de cambiar el nivel de aislamiento para que se pueda usar con (nolock)?
¿O con (readpast) logra lo que necesito (asegurarse de que la producción no esté bloqueada para acceder/modificar la tabla mientras se ejecuta mi consulta)?
Re: ¿con la opción nolock en la opción QueryBuilder?Puede anteponer la declaración SQL completa con "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"
o
"ESTABLECER LECTURA REPETIBLE DE NIVEL DE TRANSACCIÓN"
De Microsoft: ( enlace a la página)
LEER COMPROMETIDO:
Especifica que las sentencias no pueden leer datos que hayan sido modificados pero no confirmados por otras transacciones. Esto evita lecturas sucias. Los datos pueden ser modificados por otras transacciones entre declaraciones individuales dentro de la transacción actual, lo que da como resultado lecturas no repetibles o datos fantasma. Esta opción es la predeterminada de SQL Server.
LECTURA REPETIBLE:
Especifica que las sentencias no pueden leer datos que han sido modificados pero aún no confirmados por otras transacciones y que ninguna otra transacción puede modificar datos que haya leído la transacción actual hasta que se complete la transacción actual.
Así que CON(NOLOCK) es básicamente lo mismo que LEER SIN COMPROMISO, pero no importa, porque CON(NOLOCK) anulará LECTURA COMPROMETIDA o LECTURA REPETIBLE.
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: ¿con la opción nolock en la opción QueryBuilder?Agradezco las continuas respuestas.
"ESTABLECER LECTURA REPETIBLE DE NIVEL DE TRANSACCIÓN" genera un error de sintaxis.
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED" no arroja un error de sintaxis. Sin embargo, no parece que CON(NOLOCK) anule la LECTURA COMPROMETIDA o la LECTURA REPETIBLE, ya que aparece el siguiente error en el registro: Error al ejecutar la consulta SQL:
[Microsoft][Controlador ODBC para SQL Server][SQL Server]Solo puede especificar el bloqueo READPAST en los niveles de aislamiento de LECTURA COMPROMETIDA o LECTURA REPETIBLE. [SQLSTATE=42000]
Me estoy quedando sin ideas para este.
Re: ¿con la opción nolock en la opción QueryBuilder?Quizás no tenga los permisos para establecer el nivel de aislamiento.¿Puedes ejecutar el siguiente T-SQL?
Opciones de usuario de DBCC
Si puede, le indicará el nivel de aislamiento predeterminado y podrá decidir si se necesita NOLOCK.

Más información sobre estas opciones de Microsoft aquí .Dado que NOLOCK permite lecturas sucias (cambios que no se confirman en la base de datos y pueden revertirse o cambiar nuevamente), MS sugiere lo siguiente:
Puede minimizar la contención de bloqueo mientras protege las transacciones de lecturas sucias de modificaciones de datos no confirmadas utilizando cualquiera de los siguientes:
El nivel de aislamiento LECTURA COMPROMETIDA con el READ_COMMITTED_SNAPSHOT opción de base de datos establecida en ON.
El INSTANTÁNEA nivel de aislamiento.
Eventualmente arreglarás esto.