SQL Server проверяет результирующий тип данных выражения
Обычно я бы поместил тип данных в таблицу temp и проверил тип столбца таблицы, например.
select 1.0 N into tbl
sp_help tbl
Затем в столбце N отображается тип данных выражения 1.0
. (Это простой пример)
Существует функция SQL для непосредственного контроля типа данных выражения, но имя ускользает от меня прямо сейчас.
Как называется эта функция?
Ответы
Ответ 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! Я думаю, что это то, что вы ищете. Трудно отследить...