Comprobar sintaxis

12/07/2004 - 16:20 por Alberto | Informe spam
Estoy haciendo un programa de educación sobre consultas en SQL y me gustaría
poder enviar una consulta a SQL Server y que me indicase si la sintaxis es
correcta.
¿Se pude hacer sin ejecutarla? (tened en cuenta que es posible que se envíen
sentencias de inserción, borrado o actualización, además de consultas
simples)

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
12/07/2004 - 16:28 | Informe spam
[...] SET NOEXEC
Compila cada consulta, pero no la ejecuta
Cuando SET NOEXEC es ON, Microsoft® SQL ServerT compila cada lote de instrucciones Transact-SQL, pero no lo ejecuta. Cuando SET NOEXEC es OFF, todos los lotes se ejecutan después de su compilación. La ejecución de instrucciones en SQL Server consta de dos fases: compilación y ejecución. Esta opción es útil para hacer que SQL Server valide la sintaxis y los nombres de objetos del código Transact-SQL antes de ejecutarlo. También es útil para depurar instrucciones que normalmente serían parte de un lote de instrucciones mayor. La opción SET NOEXEC se establece en tiempo de ejecución, no en tiempo de análisis

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#2 Emilio Boucau
12/07/2004 - 16:31 | Informe spam
Alberto,

deberas echarle mano al SQL-DMO y que el motor te haga un parseo (como
cuando haces CTRL+F5).


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#3 Alberto
12/07/2004 - 16:46 | Informe spam
El problema que tengo ahora es que si pongo SET NOEXEC ON antes de la
consulta, aunque esta tenga errores, no veo la descripción. Me gustaría que
si hay un error, pudiese acceder al mensaje.
Gracias.
"Rubén Vigón" escribió en el mensaje
news:
[...] SET NOEXEC
Compila cada consulta, pero no la ejecuta
Cuando SET NOEXEC es ON, Microsoft® SQL ServerT compila cada lote de
instrucciones Transact-SQL, pero no lo ejecuta. Cuando SET NOEXEC es OFF,
todos los lotes se ejecutan después de su compilación. La ejecución de
instrucciones en SQL Server consta de dos fases: compilación y ejecución.
Esta opción es útil para hacer que SQL Server valide la sintaxis y los
nombres de objetos del código Transact-SQL antes de ejecutarlo. También es
útil para depurar instrucciones que normalmente serían parte de un lote de
instrucciones mayor. La opción SET NOEXEC se establece en tiempo de
ejecución, no en tiempo de análisis

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#4 Rubén Vigón
12/07/2004 - 17:25 | Informe spam
¿Cómo accedes a SQL Server desde tu aplicación? Si utilizas ADO, sólo tienes que recorrer la colección «Errors» del objeto «ADODB.Connection» previamente abierto; por ejemplo, usando 'WEHRE' en lugar de 'WHERE':

Private Sub PruebaNOEXEC()
On Error GoTo ProcesarErrores
Dim Cn As ADODB.Connection, E As ADODB.Error
Set Cn = New ADODB.Connection
Cn.Open "cadenaconexion"
Cn.Execute "SET NOEXEC ON"
Cn.Execute "SELECT * FROM Empleados WEHRE IdEmpleado = 2"
ProcesarErrores:
Cn.Execute "SET NOEXEC OFF"
For Each E In Cn.Errors
MsgBox E.Description
Next E
Cn.Close
Set Cn = Nothing
End Sub

Por cierto, en la página de Miguel Egea hay un pequeño artículo sobre el tema:

Comprobación de sintaxis T-SQL:
http://www.configuracionesintegrale...p?articulo1

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#5 Alberto
12/07/2004 - 17:36 | Informe spam
Muchas gracias. Lo voy probar ahora mismo. Trabajo con .Net pero me sirve
igual .


"Rubén Vigón" escribió en el mensaje
news:
¿Cómo accedes a SQL Server desde tu aplicación? Si utilizas ADO, sólo tienes
que recorrer la colección «Errors» del objeto «ADODB.Connection» previamente
abierto; por ejemplo, usando 'WEHRE' en lugar de 'WHERE':

Private Sub PruebaNOEXEC()
On Error GoTo ProcesarErrores
Dim Cn As ADODB.Connection, E As ADODB.Error
Set Cn = New ADODB.Connection
Cn.Open "cadenaconexion"
Cn.Execute "SET NOEXEC ON"
Cn.Execute "SELECT * FROM Empleados WEHRE IdEmpleado = 2"
ProcesarErrores:
Cn.Execute "SET NOEXEC OFF"
For Each E In Cn.Errors
MsgBox E.Description
Next E
Cn.Close
Set Cn = Nothing
End Sub

Por cierto, en la página de Miguel Egea hay un pequeño artículo sobre el
tema:

Comprobación de sintaxis T-SQL:
http://www.configuracionesintegrale...p?articulo1

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida