powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.1 Проблема с CREATE TABLE
10 сообщений из 10, страница 1 из 1
ASE 12.5.1 Проблема с CREATE TABLE
    #32566698
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает конструкция вида

if not exists ( select 1 from dbo.sysobjects t, dbo.sysusers u where t.type='U' and t.uid=u.uid and u.name='dbo' and t.name='T1')
create table dbo.T1(...)

Говорит, что объект уже существует. Он действитедьно существует, на условие в IF принимает значение "ложь" и CREATE TABLE просто не должен выполниться, то есть конструкция вида

if 1=2
create table dbo.T1(...)

Приводит к той же ошибке.

Все бы ничего, но это часть скрипта созданного Sybase Power Designer :)
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32566983
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А КАК это не работает ?
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32567044
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ругается вот так:

Server Message: Number 2714, Severity 16
Line 2:
There is already an object named 'T1' in the database.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32573371
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в следующем. Запрос этот (batch) дает ошибку не на стадии выполнения, когда можно проверить условие и что-то не делать или делать, а еще на стадии валидации. Короче, сервер парсит запрос, производит его семантический анализ и смотрит : Что он тут делает ? Ага , когда-то создает таблицу T1. А может он создавать таблицу T1 ? А фиг, не может, она уже есть.

Так вот, должно это выглядеть, чтобы работало , так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if exists ( 
  select  1  from dbo.sysobjects t, dbo.sysusers u 
  where t.type='U' 
  and t.uid=u.uid 
  and u.name='dbo' 
  and t.name='T1'
  )
  drop table T1
go

create table dbo.T1(t1 int)
go

Т.е. сначала таблица удаляется, если она есть, а затем создается.

Как заставить Sybase Power Designer генерировать именно так - я не знаю.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32573448
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак заставить Sybase Power Designer генерировать именно так - я не знаю.
Там каждый DBMS можно настроить, фактически все описано скриптами - создание, удаление, получение обьектов и т.д. Я например для Sybase ASA там много чего подправлял, чтобы PD правильно все и красиво реинженерил и генерил.

P.S. В форуме Проектирование кстати по PD очень много топиков и людей, которые им пользуются.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32574319
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Т.е. сначала таблица удаляется, если она есть, а затем создается.


Дело в том, что таблица может быть не пустая. Задача звучит так:
Если таблицы нет, то ее надо создать, а если есть - не трогать.

Конечно, мы это обойдем, но со стороны ASE 12.5.1 это явный баг! В 11.5 все это работало.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32575819
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, это не баг, это фича.
Фраза уже классическая, но если знаешь, как ASE выполняет запросы (есть несколько фаз, ну да я писал вроде бы) - тогда все понятно.
Но я согласен, поведение не очень вразумительное.
Но если вы напишите Sybase вам точно ответят, что это - ожидаемое поведение.

А насчет того, что можно сделать, если вам нужно такое поведение -
1) надо разбить запрос на создание на два батча, в стиле, как я писал
2) Ошибку создания таблицы просто игнорировать.

Можно также применить
select syb_quit() для окончания сеанса работы с сервером, но это может не подойти, если далее надо в этом же скрипте что-то еще сделать.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32576078
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фича это или баг, не так важно как назовешь. Это грязь. Запрос вида

if not exists ( select 1
from dbo.sysobjects t, dbo.sysusers u
where t.type='U' and t.uid=u.uid
and u.name='dbo' and t.name='T1')
create table dbo.T1(...)

не должен приводить к ошибке. Это стандартный прием, его используют CASE-средства, тот же Sybase Power Designer. Такие запросы прекрасно проходят во всех версиях MS SQL Server и Sybase ASA, а также в Sybase ASE 11.5. Просто перемудрили в оптимизации разбора (трансляции) запросов.

Кроме того, необходимо соблюдать приемственность версий, а этот момент у ASE весьма болезненен.

У меня за долшие годы сложилось следующее мнение: у MS SQL версии достаточно отлажены, на них можно положиться. С ASE можно работать, но администрировано очень громоздко, плохо продумано. В ASA - каждый релиз это букет серьезных багов, хотя функционально очень привлекательный продукт. И еще он БД может напрочь испортить, например при некорректной остановке сервера, а средств типа DBCC просто нет.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32577110
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это НЕ стандартный прием. И что такое вообще "стандартный прием CASE" ? SDesignor-овский что ли ? Вон ErWIN замечательно генерирует для каждой СУБД то, что в ней работает, и все.

Теперь насчет ASE - не нравиться - не работай. Я например против MSSQL ничего не имею, если бы вот он еще и не только на Виндах работал ...

Кстати, по идее и в MSSQL такой запрос должен приводить к тому же результату - ошибке.
...
Рейтинг: 0 / 0
ASE 12.5.1 Проблема с CREATE TABLE
    #32579379
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Кстати, по идее и в MSSQL такой запрос должен приводить к тому же результату - ошибке.

Я же написал, что там эта конструкция работает, как и в более ранних версиях ASE.

MasterZivТеперь насчет ASE - не нравиться - не работай.

Жизнь есть жизнь, приходится работать не только с тем, чем хочешь. Я же написал - проблема это не самая важная, справимся. Просто удивился логике продукта. Не ндо принимать так близко к сердцу. А форум на то и форум, чтобы вопросы задавать и свое мнение высказывать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.1 Проблема с CREATE TABLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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