2013-03-27 3 views
1

Я использую SQL Server 2008SQL Server выбирает, где sql_variant равно не работает?

У меня есть столбец с именем varEnteredValue из типа данных sql_Variant.

Когда я выполнить следующий оператор выбора я не получаю ничего

SELECT * FROM tblname WHERE varEnteredValue = 1 

Примечание У меня есть много значений со значением 1 в этом столбце

Вопрос

Как может Я исправляю эту проблему? Нужно ли мне преобразовывать тип данных?

+1

Уверены ли вы? Я не могу реплицировать: http://sqlfiddle.com/#!3/cb0da/1 - Я бы не рекомендовал хранить этот тип данных ... – sgeddes

ответ

8

Есть две проблемы:

  1. Вы должны преобразовать значение из SQL_VARIANT в INT.
  2. Вам нужно быть осторожным в том, как вы конвертируете значения, поскольку не каждое значение в столбце обязательно будет конвертировано в INT, и может быть сложно предсказать, будет ли сначала фильтровать SQL Server или попытаться преобразовать его. Сначала нужно протестировать, если значение является числовым, и для этого вы должны явно преобразовать его в строку.

Вот пример, который работает вокруг обоих вопросов:

WHERE CASE WHEN ISNUMERIC(CONVERT(VARCHAR(32), varEnteredValue)) = 1 
    THEN CONVERT(FLOAT, varEnteredValue) ELSE 0 END = 1; 

Почему вы используете SQL_VARIANT?

+0

У меня была следующая ошибка: Msg 8116, Level 16, State 1, Строка 1 Тип данных аргумента sql_variant недействителен для аргумента 1 функции isnumeric. –

+2

@ Мина да, извините, я должен был добавить 2a. Попробуйте с явным конвертированием. –

+0

Получил эту ошибку сейчас: Msg 245, Level 16, State 1, Line 1 Ошибка преобразования при преобразовании значения nvarchar '3.3' в тип данных int. –

Смежные вопросы