Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Проблема с правильным определением типа поля в MS SQL.   Найти похожие ветки 

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

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


 
Johnmen ©   (2005-10-19 09:41) [1]

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

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


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


> 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:51) [3]

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

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


 
MOA ©   (2005-10-19 09:54) [4]

Цитата из 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.
Удачи!


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


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

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


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


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

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


 
Johnmen ©   (2005-10-19 10:17) [7]

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

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

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


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


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

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


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


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

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


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


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

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


 
Johnmen ©   (2005-10-19 10:53) [11]

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

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


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


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

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


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

Johnmen ©   (19.10.05 10:53)


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


 
Johnmen ©   (2005-10-19 13:19) [14]

>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:46) [15]

Johnmen ©   (19.10.05 13:19)


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


 
Johnmen ©   (2005-10-19 14:02) [16]

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

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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.055 c
1-1131455380
Ilg
2005-11-08 16:09
2005.12.04
Отображаемый в Label текст


3-1129990794
Tom
2005-10-22 18:19
2005.12.04
Access + multithreading


14-1130861726
X9
2005-11-01 19:15
2005.12.04
Драйвер на Data-кабель


1-1131584384
Dementiy
2005-11-10 03:59
2005.12.04
Browse For Folder Dialog


14-1131709129
Макс1
2005-11-11 14:38
2005.12.04
ОС Singularity