2010-06-28 4 views
10

Este código no funciona, devolviendo el error:Por qué no puedo crear una vista interior de un bloque END BEGIN ...

BEGIN 
    CREATE VIEW [dbo].[dummy] AS SELECT 1 AS Dummy 
END 
GO` 

Incorrect syntax near the keyword 'VIEW'. 

¿Por qué?

Notas:

  • La presencia de la instrucción GO parece hacer ninguna diferencia

  • El comunicado interno funciona bien fuera de los delimitadores de bloque de código.

  • Esto es parte de una consulta más grande, pero probado de forma aislada, como lo es presentado aquí.

+0

¿Hay una razón por la que usted está tratando de ponerlo dentro de un bloque BEGIN ... END? –

+0

es el contenido de una cláusula if –

+0

¿En qué circunstancias desearía crear una vista condicionalmente? Parece que estás usando view incorrectamente. – Gabe

Respuesta

20

es porque CREATE VIEW debe ser la primera instrucción de un lote como se describe en this MSDN reference.

lugar, usted podría hacer: por ejemplo,

..... 
    BEGIN 
     EXECUTE('CREATE VIEW [dbo].[dummy] AS SELECT 1 AS Dummy') 
    END 
+1

Vi ese artículo, pero pensé que 'lote' se refería al código entre BEGIN y END, ¿es el único delimitador para un lote de código la palabra clave GO? –

-1

Puede usar tres vías para crear una vista temporal.

1- AdaTheDev respuesta.

2-crear una tabla temporal luego inserta el valor en ella por ejemplo create Table #TableName (ID integer). See this Link

3- Uso de expresión de tabla común [Con]. See this Link

Cuestiones relacionadas