Ошибка преобразования при преобразовании значения varchar '1' в тип данных int - PullRequest
2 голосов
/ 27 ноября 2010

У меня есть категории таблиц (c) и другая таблица (x) со столбцом, который может содержать идентификаторы cat, разделенные запятой в качестве типа данных varchar. Я хочу выбрать связанные категории, но у меня возникает ошибка "Преобразование не удалось при преобразовании значения varchar '5' в тип данных int." при попытке выбрать:

SELECT ID, Title FROM c WHERE ID IN (SELECT catIDs FROM x WHERE ID=any);

Подзапрос возвращает данные типа «1,3,4»

Ответы [ 2 ]

4 голосов
/ 27 ноября 2010

Вам нужно разделить строку 1,3,4, возвращаемую подзапросом, на отдельные значения int. SQL Server не имеет встроенной функции для этого, но вы можете использовать эту пользовательскую функцию .

Создайте функцию dbo.Split в вашей базе данных, а затем перепишите свой запрос следующим образом:

SELECT ID, Title
FROM c
WHERE ID IN
  (
    SELECT s
    FROM dbo.Split(',', '1,3,4')
  )

Я заменил подзапрос примерами 1,3,4, чтобы сократить запрос и упростить его понимание.

1 голос
/ 27 ноября 2010

Если я правильно понял, у вас есть значения типа «1,3,4» в ваших столбцах catID. Таким образом, вы должны извлечь подстроку в выборе вашего подзапроса.

Кстати, я не эксперт по MS SQL Server, но, вероятно, это плохой дизайн базы данных. Я не уверен, что движок СУБД будет использовать индексы в таком случае ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...