#sql-server
#sql-server
Вопрос:
Если у меня есть таблица с такими столбцами:
KeyName varchar(50)
RowNumber int
LocationValue sql_variant
select * from myTable where LocationValue = 'some string' -- no results, but no error
select * from myTable where CAST(LocationValue AS VARCHAR) = 'some string' --works
Если двухместный могут содержать числовые или строковые данные, это обязательно , чтобы бросить этот столбец в числовой или varchar для того, чтобы применить критерии к нему?
Невыполнение этого не приводит к какой-либо ошибке, однако результаты не возвращаются.
Комментарии:
1. Возможно, эта ссылка сможет вам помочь.
Ответ №1:
Это не обязательно как таковое, но вам нужно привести его к значимому типу для этого сравнения: хотя бы для удобства обслуживания и вашего здравомыслия.
Правила для преобразований приведены здесь, в MSDN. Выше этого у вас есть параметры сортировки и SET ANSI_PADDING, которые будут влиять на результаты. Явное ПРИВЕДЕНИЕ переопределяет эти правила.
На самом деле я не могу сказать, почему вы это видите, потому что я не использовал sql_variant годами, но я отсылаю вас к моему первому утверждению о «здравомыслии»
Комментарии:
1. Помечено как правильное, хотя я думаю, что это обязательно , но даже если это не так, я думаю, что это хорошая практика для этого.