Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с правильным определением типа поля в MS SQL. [D7, MSSQL]


Карелин Артем ©   (2005-10-19 09:12:00) 

Мне надо вытащить тип поля таблицы и вставить его в DDL запрос. Только начал заниматься этим, как наступил на грабли:
Поле описано как [field1] float(53), если же смотреть результаты запроса к таблице с этим полем типа EXEC sp_columns @table_name = table2, то видим, что precision = 15, length = 8, scale=null и radix=10.
Где там кроется загадочное 53 и как это трактовать результаты запросы непонятно.
Как получить правильный тип поля и какие еще типы полей требуют такого шаманства?


Карелин Артем   (2005-10-19 23:00:00) [1]


> Johnmen ©   (19.10.05 14:02) [16]

У меня на работе вырубили электричество в неподходящий момент, однако скриншот я тебе все-таки покажу, хоть и не свой. http://www.sqlmanager.net/en/products/mssql/manager/screenshots/11
Однако внимательнее читай что пишут. Может тогда и сможешь отличить надпись Enterprise manager от EMSMS SQL manager.


Johnmen   (2005-10-19 14:02:00) [2]

>Danilka ©   (19.10.05 13:46) [15]

Хм... Я нигде не удивлялся...:)
Просто просил автора показать, где там "вкладка DDL"


Danilka   (2005-10-19 13:46:00) [3]

Johnmen ©   (19.10.05 13:19)


Дык, а чему ты тогда удивляешься, честно говоря, не понял.. :)
Для меня самое больше удивление в свое время было с тем, что непонятно, нафига этот параметр n придумали для флоата. :)


Johnmen   (2005-10-19 13:19:00) [4]

>Danilka ©   (19.10.05 13:04) [13]

Да нет никакой заморочки.
Как интерпретировать float(X) в самописном скрипте создания таблицы уже сказал BOL устами MOA ©
И  IB_FLOAT = MSSQL_REAL,  IB_DOUBLE PRECISION = MSSQL_FLOAT


Danilka   (2005-10-19 13:04:00) [5]

Johnmen ©   (19.10.05 10:53)


В MSSQL, "float( n )" - n означает кол-во битов для мантиссы, а не кол-во цифер :)
то-есть, если, например, в IB есть FLOAT - 4 байта и DOUBLE PRECISION 8 байт, то в MSSQL им соотетствуют float(24) и float(53)
Вто-такая вот заморочка. :)


Карелин Артем   (2005-10-19 12:07:00) [6]


> Johnmen ©   (19.10.05 10:53) [11]

Вечером выложу где-нибудь.


Johnmen   (2005-10-19 10:53:00) [7]

>Карелин Артем ©   (19.10.05 10:42) [9]
>Снимок экрана дать? ))

Да, пожалуйста.


Карелин Артем   (2005-10-19 10:46:00) [8]


> Johnmen ©   (19.10.05 10:17) [7]

Название софта в моем посте посмотри еще раз повнимательнее и сравни с тем, которым пользуешься.


Карелин Артем   (2005-10-19 10:42:00) [9]


> Johnmen ©   (19.10.05 10:17) [7]

Снимок экрана дать? ))


Nikolay M.   (2005-10-19 10:25:00) [10]


> как это трактовать результаты запросы непонятно.
> Как получить правильный тип поля и какие еще типы полей
> требуют такого шаманства?

Последовательность получения ответа самостоятельно такая:
1) запустить профайлер, в нем запустить новый trace, очистить результаты
2) в QA ткнуть правой лапой на таблицу, выбрать пункт CREATE, чтобы QA показал скрипт для создания таблицы
3) возвращаемся в профайлер, выделяем все пойманные event-ы в верхней части окна, копируем все команды sql из нижней части окна в QA
4) анализируем получившийся скрипт, в частности, видим полезную, но недокументированную ХП sp_MShelpcolumns, смысл ее вполне понятен, для получения бОльшей информации можно посмотреть ее текст.


Johnmen   (2005-10-19 10:17:00) [11]

>Карелин Артем ©   (19.10.05 09:57) [5]

По-моему, ты вводишь в заблуждение.
- где такая закладка DDL
- в сгенерённом скрипте не м.б. указано float(53) по определению

Ну а про типы с пл.точкой уже сказали...


Карелин Артем   (2005-10-19 09:58:00) [12]


> MOA ©   (19.10.05 09:54) [4]

Спасибо большое. С меня пузырь :)


Карелин Артем   (2005-10-19 09:57:00) [13]


> Johnmen ©   (19.10.05 09:51) [3]

Взял базу, на которой провожу эксперименты, открыл ее в EMS MS SQL Manager, открыл таблицу и скопировать часть скрипта с вкладки DDL.


MOA   (2005-10-19 09:54:00) [14]

Цитата из BOL (Transact-SQL Reference - float and real):
n is     Precision  Storage size
1-24   7 digits    4 bytes
25-53 15 digits   8 bytes
Note  Microsoft® SQL Server™ 2000 treats n as one of two possible values. If 1<=n<=24,  n is treated as 24. If 25<=n<=53, n is treated as 53.
Удачи!


Johnmen   (2005-10-19 09:51:00) [15]

>Карелин Артем ©   (19.10.05 09:49) [2]

Это ты сам написал или снял скрипт создания с существующей таблицы?


Карелин Артем   (2005-10-19 09:49:00) [16]


> Johnmen ©   (19.10.05 09:41) [1]

CREATE TABLE [table2] (
 [id_table2] bigint IDENTITY(0, 1) NOT FOR REPLICATION NOT NULL,
 [Name1] nvarchar(60) COLLATE Cyrillic_General_CI_AS,
 [Name2] nvarchar(40) COLLATE Cyrillic_General_CI_AS,
 [Date_time] datetime,
 [Money_] money,
 [Integ] int,
 [Workstation] varchar(60) COLLATE Cyrillic_General_CI_AS DEFAULT (@@servername) NOT NULL,
 [field1] float(53),
 [field2] binary(1),
 CONSTRAINT [PK_table2] PRIMARY KEY ([id_table2], [Workstation])
)
ON [PRIMARY]
GO


Johnmen   (2005-10-19 09:41:00) [17]

>Поле описано как [field1] float(53),

???????? Где описано ?????


Наверх

Титульная страница Поиск, карта сайта Написать письмо