使用 ifists 命令时,unix 脚本中出现不正确的语法错误(sybase 作为数据库)

使用 ifists 命令时,unix 脚本中出现不正确的语法错误(sybase 作为数据库)

我的以下脚本出现以下错误:

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
!

当我执行此操作时,即使尝试了很多次,我仍然收到以下错误。

错误详细信息:(日志)

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

答案1

这不是 shell 脚本问题,而是 SQL 语法问题。

从错误输出来看:

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

看起来前两行被视为单个命令,这可能就是数据库引擎检测到语法错误的原因。它可能需要分隔成两个命令。我不知道 Sybase,但尝试使用use $db;作为此处文档的第一行。

除此之外,你的 shell 脚本没有什么严重的错误。我唯一要评论的是缺乏对$DBLogin$DBName参数扩展的双引号,以及重定向到命令的此处文档的非常规(尽管合法)分隔符isql(我会使用END_SQL或类似的)。

相关内容