Обязательно выполнять ПРИВЕДЕНИЕ к определенному типу данных, чтобы применить критерии к столбцу sql_variant в SQL SERVER?

#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. Помечено как правильное, хотя я думаю, что это обязательно , но даже если это не так, я думаю, что это хорошая практика для этого.