Estaba escribiendo un fragmento SQL (aparentemente) sencillo que deja caer una columna después de asegurarse de que la columna exista.
El problema: si la columna NO existe, el código dentro de ¡la cláusula IF se queja de que no puede encontrar la columna! Bueno, doh, ¡es por eso que está dentro de la cláusula IF!
Entonces mi pregunta es, ¿por qué un fragmento de código que no debe ejecutarse produce errores?¿Por qué un bloque T-SQL genera un error incluso si ni siquiera se debería ejecutar?
Aquí está el fragmento:
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
ALTER TABLE [dbo].[Table_MD]
DROP COLUMN timeout
END
GO
... y aquí está el error:
Error executing SQL script [...]. Invalid column name 'timeout'
estoy usando Microsoft SQL Server 2005 Express Edition.
Correcto. También obtendrá este error si hay tablas temporales que utiliza sproc. – ConcernedOfTunbridgeWells
Para aclarar, si existe una tabla temporal, entonces las columnas se verificarán cuando compile el sproc. Donde el sproc realmente crea la tabla (por ejemplo, con una selección en) puede que tenga que soltar la tabla antes de volver a compilar el sproc. – ConcernedOfTunbridgeWells
Esta es una muy buena respuesta :) –