Как SQL cкрипт для MSSQL запустить под Sybase?

User avatar
Vasik
Уже с Приветом
Posts: 2191
Joined: 04 Nov 2001 10:01
Location: Новый cвет

Как SQL cкрипт для MSSQL запустить под Sybase?

Post by Vasik »

Есть скрипт который используется для создания таблиц для MSSQL. Я не спец в этом деле, но шеф сказал что синтаксис для Sybase такой же как и для MSSQL. Поковырявшись пару дней удалось запустить Sybase и создав базу я могу создавать таблицы, используя, например, такой тестовый код:
CREATE TABLE chudaki (
CHUDAK_ID varchar (20) NULL ,
CHUDAK_NAME varchar (100) NULL ,
DESCR varchar (100) NULL ,
ADDRESS varchar (20) NULL ,
CITY varchar (20) NULL ,
STATE varchar (20) NULL,
ZIP varchar (20) NULL,
COUNTRY varchar (20) NULL
)
GO

Ниже кусок нашего кода для MS SQL, на который Sybase сразу матюкается:

if exists (select * from sysobjects where id = object_id(N'[dbo].[clients]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[clients]
GO

Матюкается так:
Msg 14216, Level 16, State 1:
Server 'tiridates', Line 1:
Function 'OBJECTPROPERTY' not found. If this is a SQLJ function, use sp_help to
check whether the object exists (sp_help may produce a large amount of output).

Далее код:

CREATE TABLE [dbo].[clients] (
[self_id] [int] IDENTITY (1, 1) NOT NULL ,
[self_status] [smallint] NULL ,
[self_date] [datetime] NOT NULL DEFAULT GETDATE() ,
[name] [varchar] (50) NOT NULL ,
[os] [varchar] (25) NULL ,
[url] [varchar] (80) NOT NULL ,
[description] [varchar] (200) NULL ,
[type] [varchar] (15) NOT NULL ,
[priority] [varchar] (15) NOT NULL ,
[major_version] [smallint] NOT NULL ,
[minor_version] [smallint] NOT NULL ,
[build_number] [smallint] NOT NULL
)
GO

Ругается так:

Msg 156, Level 15, State 2:
Server 'tiridates', Line 1:
Incorrect syntax near the keyword 'IDENTITY'.

Вопрос к знатокам - действительно ли код или типы данных не совместимы или я чего делаю не так и если несовместимы, то где искать мануал как всё на скорую руку заточить под Sybase?
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Простые вещи совместимы
совместимость 6.5 была вообще почти полная
Сейчас они ушли друг от друга

Good news заключается в том что чтобы заставить это работать достаточно немоного поработать в текстовом редакторе который делает заменый по образцу

например уберите OBJECTPROPERTY и замените на type='U' ? - не уверен, посмотрите чему равен type в sysobjects для таблицы у Sybase. Теоретически будет работать даже без этого если имена таблиц не совпадабт с именами других объектов

Если точно знаете что таблиц раньше не было то вообще можете выбросить if exists...

Наконец что касается identity То там по помему нужно выкинуть (1,1) но я не уверен. Почитайте
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014

Return to “Вопросы и новости IT”