次のスクリプトで次のエラーが発生します。
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
これはシェルスクリプトの問題ではなく、SQL構文の問題です。
エラー出力と判断すると次のようになります。
1> use db
1> if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2> begin
最初の 2 行は 1 つのコマンドで処理されるように見えます。これがデータベースエンジンが構文エラーを検出する理由である可能性があります。 2 つのコマンドに分ける必要があります。私はSybaseについて知りませんが、use $db;
ここの記事の最初の行として試してみてください。
それ以外はシェルスクリプトに深刻な問題はありません。私が言及しなければならない唯一のものは、二重引用符と引数拡張が$DBLogin
不足しており、コマンドにリダイレクトされる$DBName
文書の枠組みにとらわれない(法的であるにもかかわらず)区切り文字ですisql
(使用されたかEND_SQL
類似しているでしょう)。