Erro incorreto de sintaxe no script unix ao usar o comando if exists (sybase como banco de dados)

0

Eu tenho o script abaixo me apresentando o seguinte erro, você poderia por favor verificar e me ajudar o problema no script que eu escrevi:

isql -U$DBLogin -PDBPAss -S$DBName -e <<!
   use $db
go
   if exists (select 1 from syscolumns where id = object_id('Main_table')  and name = 'Stamm')
   begin
   insert into Main_table select * from temp_table
   end
   else
   begin
   create table Main_table
   (
    Stamm char (5),
    Datum int,
    Perdat char (5) null
   )
go
   insert into Main_table select * from temp_table
   end
go
DROP TABLE temp_table
go
!

Quando executo isso, tenho recebido o erro abaixo, mesmo sendo tentado tantas vezes.

Detalhes do erro: (log)

1>    use db
1>    if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2>    begin
3>    insert into Main_table select * from temp_table
4>    end
5>    else
6>    begin
7>    create table Main_table
8>    (
9>         Stamm char (5),
10>         Datum int,
11>         Perscd char (5) null
12>    )
Msg 102, Level 15, State 181:
Server 'DB_DEVP', Line 12:
Incorrect syntax near ')'.
1>    insert into Main_table select * from temp_table
2>    end
Msg 156, Level 15, State 2:
Server 'DB_DEVP', Line 2:
Incorrect syntax near the keyword 'end'.
1>    DROP TABLE db..temp_table
    
por suresh gudimetla 11.10.2018 / 15:27

1 resposta

0

Este não é um problema de script de shell, mas um problema com a sintaxe do seu SQL.

Da saída de erro:

1>    use db
1>    if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2>    begin

Parece que as duas primeiras linhas são consideradas como um único comando e pode ser por isso que o mecanismo de banco de dados detecta um erro de sintaxe. Pode precisar ser delimitado em dois comandos. Eu não conheço o Sybase, mas tento usar use $db; como a primeira linha do documento here.

Além disso, não há nada terrivelmente errado com o seu script de shell. A única coisa que gostaria de comentar é a falta de aspas duplas das expansões dos parâmetros $DBLogin e $DBName , e o muito não convencional (embora legal) delimitador para o documento here que você redireciona para o comando isql ( Eu teria usado END_SQL ou similar).

    
por 11.10.2018 / 15:33