SQL Server проверяет результирующий тип данных выражения - PullRequest
42 голосов
/ 15 февраля 2011

Обычно я помещаю тип данных во временную таблицу и проверяю тип столбца таблицы, например,

select 1.0 N into tbl

sp_help tbl

Столбец N затем показывает тип данных выражения 1.0.(Это единственный простой пример)

Существует функция SQL для прямой проверки типа данных выражения, но имя ускользает от меня прямо сейчас.

Как называется эта функция

Ответы [ 3 ]

66 голосов
/ 15 февраля 2011

SQL_VARIANT_PROPERTY близко

DECLARE @what sql_variant
DECLARE @foo decimal(19,3) = 1, @bar decimal(11,7) = 2

SELECT @what = @foo / @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

SELECT @what = @foo + @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')


SELECT @what = @foo * @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

Или временная таблица / SELECT..INTO .. ​​как расширение того, что вы уже сделали

Редактировать: Ответ Ремуса?

4 голосов
/ 15 февраля 2011

Все, что я могу вспомнить, это функции ISNUMERIC и ISDATE .

Они будут возвращать 1/0, когда передано выражение. Я не могу придумать ничего такого, что, к сожалению, вернет тип, если ему дано выражение.

UPDATE:

Попробуйте SQL_VARIANT_PROPERTY ! Я думаю, это то, что вы ищете. Трудно отследить ...

2 голосов
/ 15 февраля 2011

Я никогда не видел такой функции.

Из статьи MSDN о выражениях T-SQL :

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

Когда два выражения объединяются используя сравнение или логические операторы, результирующий тип данных является логическим и значение является одним из следующих: ИСТИНА, ЛОЖЬ или НЕИЗВЕСТНО. Для большего информация о булевых типах данных, см. операторы сравнения (Transact-SQL).

Когда два выражения объединяются используя арифметику, побитовую или строковую операторы, оператор определяет результирующий тип данных.

сложные выражения, состоящие из множества символы и операторы оценивают однозначный результат. Тип данных, сопоставление, точность и значение результирующее выражение определяется объединение компонентных выражений, по два, пока окончательный результат не будет достиг. Последовательность, в которой выражения объединяются определяется приоритет операторов в выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...