Tengo el siguiente código:¿Cómo funciona SET NOEXEC ON?
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
-- print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
set noexec off
-- end of code
Tenga en cuenta que la tabla "tblfoobar" no existe en la base de datos. Cuando ejecuto este código, el mensaje aparece:
Please update your DB to version 5 before running this script. Msg 208, Level 16, State 1, Line 1 Invalid object name 'tblFooBar'.
que estaba esperando que la creación de noexec en ON no puede dar la parte de "Mensaje 208" del mensaje.
Luego, de nuevo "set noexec on" compila el código, no lo ejecuta. Intentar insertar algo en una tabla que no existe es un error en tiempo de compilación, supongo. Si ese es el caso, entonces debería aparecer el error sobre "objeto faltante".
Ahora déjame decirte el comportamiento extraño que he observado. Si quito el comentario de la línea "- Imprimir 'ficticio'"
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
y ejecutar el código, sólo aparece el siguiente mensaje.
Actualice su base de datos a la versión 5 antes de ejecutar este script.
Esta vez no hay ningún mensaje acerca de la tabla faltante.
¿Alguien me puede explicar este comportamiento? Gracias.
Solo para asegurarnos de que estamos en la misma página: ¿esto es para el servidor sql? ¿cual version? –
Lo siento, debería haberlo mencionado. He intentado este código usando MS SQL 2000. – ahmjt
Estoy viendo el mismo comportamiento en SQL 2005 –