Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Посмотреть тип данных столбца  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Добрый день!

Помню, что есть встроенная функция, чтобы смотреть типы и размерность данных в столбцах выборки? (int, bigint, char ect.)

Есть сложная процедура, в которой почему-то на выходе параметр типа bigint, хотя везде эта колонка объявляется как money, не могу понять, когда это происходит.
26 фев 16, 11:41    [18866418]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шыфл
что есть встроенная функция, чтобы смотреть типы и размерность данных в столбцах выборки?

В смысле несуществующего еще результата запроса ?

Сообщение было отредактировано: 26 фев 16, 11:44
26 фев 16, 11:44    [18866438]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Шыфл,

как Вы узнали, что bigint?
26 фев 16, 11:57    [18866536]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
o-o
Guest
для expression есть SQL_VARIANT_PROPERTY (expression, 'BaseType')
для колонки есть columnproperty(id, column, 'Scale')
26 фев 16, 12:00    [18866561]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Владислав Колосов,

Результат запроса копируется в таблицу на Access из рекордсета, а в нём тип бигинт, который Acc не тянет, приходится переопределять его как money. На сервере полно пользовательских типов, которые люди когда-то насоздовали, а другие использовали, опираясь на название а не на базовый тип данных, поэтому часто возникают коллизии типов...
26 фев 16, 12:08    [18866608]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Шыфл,

КО говорит, что процедуру надо переписать с использованием стандартных типов. В этом случае Вы получите управляемое поведение.
26 фев 16, 12:12    [18866643]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Glory,
почему же, для вполне конкретного результата конкретного вызова процедуры с определёнными параметрами.

Беда в том, что типы колонок могут не совпадать для разных входных данных процедуры из-за особенностей дизайна, ветвлений и низкого качества кода...
26 фев 16, 12:13    [18866644]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шыфл
почему же, для вполне конкретного результата конкретного вызова процедуры с определёнными параметрами.

Процедура - это текст с командами. Как вы себе представляете извлечение из произвольного текста именно того, что спродуцирует какой-то результат при запуске ?
26 фев 16, 12:19    [18866692]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Glory,

Процедура - это текст с командами. "Извлечение из произвольного текста именно того, что спродуцирует какой-то результат при запуске" называется отладкой процедуры. Текст процедуры изменяется таким образом, чтобы в определённых местах при определённых параметрах (debug=1) процедура позвращает требуемые данные. Например искомый SQL_VARIANT_PROPERTY
26 фев 16, 12:34    [18866805]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шыфл
"Извлечение из произвольного текста именно того, что спродуцирует какой-то результат при запуске" называется отладкой процедуры.

Для отладки процедуру надо как минимум запустить
Вы же ищите какую-то волшебную функцию, которая без запуска процедуры найдет в ее тексте именно тот запрос, который вернет данные. Потом распарсит этот запрос в поисках выходного набора. Потом каждое поле этого набора сопоставит с полем физического объекта. А для вычисляемых полей еще определит тип выражения
26 фев 16, 12:39    [18866841]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Glory
Для отладки процедуру надо как минимум запустить
Вы же ищите какую-то волшебную функцию, которая без запуска процедуры найдет в ее тексте именно тот запрос, который вернет данные. Потом распарсит этот запрос в поисках выходного набора. Потом каждое поле этого набора сопоставит с полем физического объекта. А для вычисляемых полей еще определит тип выражения

Было бы неплохо иметь режим exequtenoquery, чтобы сервер возвращал только структуру, без данных, но с их типами.

Если я запускаю процедуру через Access, то там есть код, который копирует возвращаемые наборы данных в талицы. Раньше всё было на DAO и таблицы Access во время каждого запуска просто дропались и пересоздавались на основе RecordSet'ов. Счас переделали на ADO и сказали сравнивать наборы данных и вываливаться, если идёт не совпадение - и понеслась. Выяснилось, что там жуткий бардак, часто не совподает колличество полей, порядок полей перепутан а типы столбцов меняются псевдорандомным образом, но раньше это никому не мешало - формы Access на основе текстбоксов всё прекрасно отображали, потому что по сути получалось позднее связывание...
26 фев 16, 12:51    [18866905]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шыфл
Было бы неплохо иметь режим exequtenoquery, чтобы сервер возвращал только структуру, без данных, но с их типами.

Без выполнения ? И из какой ветки более-менее сложной процедуры должна быть показана "структура, без данных, но с их типами" ?

SET FMTONLY { ON | OFF }
Returns only metadata to the client. Can be used to test the format of the response without actually running the query.


Шыфл
Если я запускаю процедуру через Access, то там есть код, который копирует возвращаемые наборы данных в талицы. Раньше всё было на DAO и таблицы Access во время каждого запуска просто дропались и пересоздавались на основе RecordSet'ов. Счас переделали на ADO и сказали сравнивать наборы данных и вываливаться, если идёт не совпадение - и понеслась. Выяснилось, что там жуткий бардак, часто не совподает колличество полей, порядок полей перепутан а типы столбцов меняются псевдорандомным образом, но раньше это никому не мешало - формы Access на основе текстбоксов всё прекрасно отображали, потому что по сути получалось позднее связывание...

Бардак нельзя ликвидировать программными методами.
26 фев 16, 12:57    [18866934]     Ответить | Цитировать Сообщить модератору
 Re: Посмотреть тип данных столбца  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Шыфл
Помню, что есть встроенная функция, чтобы смотреть типы и размерность данных в столбцах выборки?
sp_describe_first_result_set
26 фев 16, 13:02    [18866970]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить