Подтвердить что ты не робот

SQL Server проверяет результирующий тип данных выражения

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

select 1.0 N into tbl

sp_help tbl

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

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

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

4b9b3361

Ответ 1

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.. ​​как расширение того, что вы уже сделали

Изменить: Ответ Ремуса?

Ответ 2

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

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

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

Когда два выражения объединяются используя сравнительные или логические операторы, результирующий тип данных является булевым и значение является одним из следующих: TRUE, FALSE или UNKNOWN. Для большего информация о булевых типах данных, см. Операторы сравнения (Transact-SQL).

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

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

Ответ 3

Все, что я могу представить, это ISNUMERIC и ISDATE.

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

UPDATE:

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