我的以下脚本出现以下错误:
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
或类似的)。