none
Erro ao Criar uma View sendo executada por uma SP RRS feed

  • Pergunta

  • Pessoal, estou tentando criar uma view através de uma SP. Entretanto esta dando o erro abaixo:

    Msg 156, Level 15, State 1, Procedure ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW, Line 11
    Incorrect syntax near the keyword 'view'.
    Msg 319, Level 15, State 1, Procedure ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW, Line 12
    Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

    Essa é a SP:

    CREATE PROC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW
    ( @id_ano int ) as 
    
    
    create view vw_agrupa_entidade_app1_children as 
    with parent_child(sk_parent, sk_child, entidade, codigo) as 
    (select sk_parent, sk_entidade, entidade, codigo from d_entidade_app1
    where sk_parent is not null
    union all
    select p.sk_parent, c.sk_entidade, c.entidade, c.codigo from d_entidade_app1 as c
    inner join parent_child as p
    on c.sk_parent = p.sk_child)
    select * from parent_child
    
    
    

    Se puderem me ajudar eu agradeço.


    quarta-feira, 4 de janeiro de 2017 16:22

Respostas

Todas as Respostas

  • Deleted
    quarta-feira, 4 de janeiro de 2017 16:26
  • Boa tarde, Cleber!

    De fato, você não pode criar uma view dentro de uma procedure. O Create View deve ser executado como um único comando.

    Se for muito necessário você pode criar a view dinamicamente como:

    Create Proc p_teste
    As Begin
    
    Declare @Cmd As VarChar(Max)
    
    Set @Cmd = 
    '
    	Create View v_Teste 
    	As
    		Select Name, Object_Id
    		From	sys.all_objects
    '
    
    Exec (@Cmd)
    
    Select * From v_Teste
    
    End
    Go
    
    Exec p_teste
    

    Mas cara, esse tipo de coisa não faz muito sentido. Por que você precisa criar essa view em tempo de execução dentro de uma procedure? Talvez haja um outro jeito de resolver.


    att,
    Mailson Santana - DBA
    MCSE: Data Management and Analytics
    Site: www.mailsonsantana.com.br
    Linkedin: mailsonsantana




    quarta-feira, 4 de janeiro de 2017 17:09
  • Cara não acredito... Sabe o que estava faltando para dar certo;

    GO entre o create proc e o create view

    CREATE PROC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW
    ( @id_ano int ) as 
    
    GO /* só fiz isso e funcionou */
    
    create view vw_agrupa_entidade_app1_children as 
    with parent_child(sk_parent, sk_child, entidade, codigo) as 
    (select sk_parent, sk_entidade, entidade, codigo from d_entidade_app1
    where sk_parent is not null
    union all
    select p.sk_parent, c.sk_entidade, c.entidade, c.codigo from d_entidade_app1 as c
    inner join parent_child as p
    on c.sk_parent = p.sk_child)
    select * from parent_child
    Mais obrigado pela ajuda.
    • Sugerido como Resposta André SeccoMVP quarta-feira, 4 de janeiro de 2017 17:20
    quarta-feira, 4 de janeiro de 2017 17:14
  • Deleted
    quarta-feira, 4 de janeiro de 2017 17:51
  • To meio confuso agora José, desculpe mais poderia me mandar a alteração que eu preciso fazer? Estou começando agora em SQL, então ainda to apanhando com algumas coisas. Achei que tinha conseguido.

    Atenciosamente; Cleber A. dos Santos Linkedin: http://www.linkedin.com/in/cleberasantos E-mail: cbr.asantos@gmail.com Skype: cbr.santos

    quarta-feira, 4 de janeiro de 2017 18:22
  • Deleted
    quarta-feira, 4 de janeiro de 2017 18:42
  • Certo. Obrigado pelo apoio pessoal.

    Atenciosamente;

    Cleber A. dos Santos

    Linkedin: http://www.linkedin.com/in/cleberasantos

    E-mail: cbr.asantos@gmail.com

    Skype: cbr.santos


    quarta-feira, 4 de janeiro de 2017 18:51