Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.1 и isql / 9 сообщений из 9, страница 1 из 1
16.05.2005, 14:50
    #33067320
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
День добрый

Linux, ASE 12.5.1

есть кусок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if not exists(select id from sysobjects where name='VersionHistory')
  CREATE TABLE VersionHistory (
    id BIDENT IDENTITY,
    MajorVersion int NOT NULL,
    MinorVersion int NOT NULL,
    ReleaseNum int NOT NULL,
    Build int NOT NULL,
    Patch int NULL,
    StartDatetime datetime NOT NULL,
    StopDatetime datetime NOT NULL)

Объект VersionHistory присутствует, трабла собственно в том, что если запустить этот кусок кода в интерактивном режиме, то create table не отрабатываети ( что собственно и верно ), если же `isql .... -D CORRECT_DB -i file_with_this_code.sql` то отрабатывается в результате чего пытается создать еще раз таблицу и вываливается с ошибкой....

Кто нибудь подскажет где грабли ?
...
Рейтинг: 0 / 0
16.05.2005, 15:15
    #33067404
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
вернее даже не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[ 577 ] billing.bill_2. 1 > if not exists(select id from sysobjects where name='VersionHistory')
[ 577 ] billing.bill_2. 2 > begin
[ 577 ] billing.bill_2. 3 >         print "Table Not EXISTS"
[ 577 ] billing.bill_2. 4 >         CREATE TABLE VersionHistory (
[ 577 ] billing.bill_2. 5 >                 id BIDENT IDENTITY,
[ 577 ] billing.bill_2. 6 >                 MajorVersion int NOT NULL,
[ 577 ] billing.bill_2. 7 >                 MinorVersion int NOT NULL,
[ 577 ] billing.bill_2. 8 >                 ReleaseNum int NOT NULL,
[ 577 ] billing.bill_2. 9 >                 Build int NOT NULL,
[ 577 ] billing.bill_2. 10 >                 Patch int NULL,
[ 577 ] billing.bill_2. 11 >                 StartDatetime datetime NOT NULL,
[ 577 ] billing.bill_2. 12 >                 StopDatetime datetime NOT NULL )
[ 577 ] billing.bill_2. 13 >         print "Print N 2"
[ 577 ] billing.bill_2. 14 > end
[ 577 ] billing.bill_2. 15 > go
Msg  2714 , Level  16 , State  1 
Server 'B133', Line  4 
There is already an object named 'VersionHistory' in the database.

тоесть и в интерактивном режиме оно отрабатывает, только как то странно... Тоесть принты проигнорировала, а crreate table выполнила... Почему ???
...
Рейтинг: 0 / 0
16.05.2005, 16:02
    #33067573
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
Линух не линух = это все равно,
а вот оператор CREATE TABLE должен быть целиком в
отдельном батче. Т.е. IF до него писать нельзя.
Поэтому пишут немного по другому :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if exists(select id from sysobjects where name='VersionHistory')
  drop table VersionHistory
go

  CREATE TABLE VersionHistory (
    id BIDENT IDENTITY,
    MajorVersion int NOT NULL,
    MinorVersion int NOT NULL,
    ReleaseNum int NOT NULL,
    Build int NOT NULL,
    Patch int NULL,
    StartDatetime datetime NOT NULL,
    StopDatetime datetime NOT NULL)
go
...
Рейтинг: 0 / 0
16.05.2005, 16:18
    #33067622
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
дык задачка несколько в другом
надо проверить если нет таблици то создать ее если есть то ничего не делать.

засада даже не в том что оно ругается а в том что вся эта байда от билинга, комерческого, мать их так не хорошо, так вот там go один раз в конце стоит а после каждого оператора проверка на ошибки и если ошибка то goto error....
...
Рейтинг: 0 / 0
16.05.2005, 16:35
    #33067685
michael_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
Был уже подобный топик. Мы в это тоже вляпывались. На ASE 11 такая конструкция прекрасно работала, на 12 перестала.

Смех в том, что такой скрипт генерит Sybase Power Designer!
...
Рейтинг: 0 / 0
16.05.2005, 17:28
    #33067897
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
michael_Был уже подобный топик.

Спасибо, почитал....
...
Рейтинг: 0 / 0
18.05.2005, 20:35
    #33073247
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
2 michael

извини, перечитал еще раз ваш пост за 2004 год, и... не понял. Не подскажек как вы все таки реализовали данную логику ? То есть если нет таблици то создать ее.
...
Рейтинг: 0 / 0
18.05.2005, 21:11
    #33073285
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
Через динамический SQL

if not exists (select name from sysobjects where name = "VersionHistory")
exec ("CREATE TABLE VersionHistory (id numeric(10, 0) identity, MajorVersion int NOT NULL, MinorVersion int NOT NULL, ReleaseNum int NOT NULL, Build int NOT NULL, Patch int NULL, StartDatetime datetime NOT NULL, StopDatetime datetime NOT NULL)")
...
Рейтинг: 0 / 0
18.05.2005, 21:51
    #33073324
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.1 и isql
morisЧерез динамический SQL

if not exists (select name from sysobjects where name = "VersionHistory")
exec ("CREATE TABLE VersionHistory (id numeric(10, 0) identity, MajorVersion int NOT NULL, MinorVersion int NOT NULL, ReleaseNum int NOT NULL, Build int NOT NULL, Patch int NULL, StartDatetime datetime NOT NULL, StopDatetime datetime NOT NULL)")

блин, работает. Спасибо.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.1 и isql / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]