2010-03-29 10 views
6

Digamos que tengo un guión así:¿Deshabilitar la comprobación del script TSQL?

si (una condición) comienzan seleccione somecolumn de alguna_tabla final

permite decir, que "somecolumn" no existe y la condición no es verdadero, lo que significa que la selección es NO ejecutada. Aunque la selección no se ejecutará, la secuencia de comandos no es válida, Management Studio se queja de la columna que falta "somecolumn".

Pregunta: ¿Puedo de alguna manera desactivar este tipo de control para que se ejecute la secuencia de comandos y dado que if no es verdadero, nunca se dará cuenta de que la columna no se encuentra?

Gracias :-)

+0

Hay algo muy mal con su diseño si tiene que preocuparse de si existe una columna o no. – HLGEM

Respuesta

4

uso de SQL dinámico

if(some condition) 
begin 
    exec ('select somecolumn from sometable') --or sp_executesql 
end 

En realidad, no tiene sentido para ejecutar esta causa de lo que es SQL. No se ejecuta línea por línea: todo el lote se analiza, etc. de una vez, y el error se genera aquí, antes de que todo se ejecute en el sentido que usted quiere decir. Esto es por diseño ...

+0

+1, ¡duh me ganó por 44 segundos! –

+0

no 100% Este código funciona para mí: SI OBJECT_ID ('Reports.dbo.RecordsTable') ES NULO Sin embargo, otros enfoques con solo cadenas de parámetros simples para indicar tabla1 o 2 fallan. Sin embargo, el truco dinámico de sql siempre funciona, pero es un poco molesto, por supuesto. – regeter

2

Puede crear un procedimiento que haga referencia a una tabla que no existe, pero que es la única excepción a la regla. Del BOL:

resolución de nombres diferida sólo puede utiliza cuando se hace referencia inexistentes objetos de tabla. Todos los demás objetos deben en el momento en que se crea el procedimiento almacenado . Por ejemplo, cuando hace referencia a una tabla existente en un procedimiento almacenado , no puede enumerar columnas inexistentes para esa tabla.

Más allá de usar SQL dinámico, no hay medios para hacer referencia a columnas que no existen en un procedimiento almacenado.

Cuestiones relacionadas