2017-01-18 2 views
0

У меня есть запрос, как этотSQL Server: Конверсия удалось при преобразовании значения VARCHAR '1,2'

select 
    t.tiid, t.employeeid, t.remarks, 
    dd.DocID, dd.Document, dd.DocuName 
from 
    ti t 
inner join 
    History cth on cth.tiid = t.tiid 
inner join 
    Downloads dd on dd.DocID = cth.DocID 

Мои данные в таблице, как это

истории:

DocID   DocuName 
1,2    abc.dox,def.docx 

Загрузки

DocID DocuName   document 
1  abc.docx   x3400000efg.. 
2  def.docx   xc445560000... 

, но когда я выполнить этот запрос, он выдает ошибку:

Conversion failed when converting the varchar value '1,2' to data type int.

+6

Вы должны переделать таблицу истории своими взглядами. Почему вы сохраняете значения, которые должны быть в разных строках, разделенных запятой в одной строке? –

ответ

3

DocID истории кратная DocID была объединена с запятой, поэтому вы не можете сравнить значение непосредственно (одно значения против нескольких значений).

Вы можете проверить, используют ли множественные значения заданное значение CHARINDEX.

Чтобы убедиться, что полностью соответствует подстроке, необходимо указать разделитель, чтобы указать одно значение, иначе может получиться неправильный результат. Для Eample: CHARINDEX ('1,', '12,2,3') будет 1, но на самом деле в строке нет 1.

select 
t.tiid, 
t.employeeid, 
t.remarks, 
dd.DocID, 
dd.Document, 
dd.DocuName 
from ti t 
inner join History cth on cth.tiid=t.tiid 
inner join Downloads dd on CHARINDEX(','+LTRIM(dd.DocID)+',',','+cth.DocID+',')>0 
+1

Приобретено для использования CHARINDEX. Но можете ли вы объяснить логику CharIndex вместо кода в ответ? –

0

Как говорит ошибка, вы пытаетесь приравнять строку с int.You нужно преобразовать Int DocId в строку и проверить, если он присутствует в разделенных запятыми DocId .Something как

SELECT t.tiid, 
     t.employeeid, 
     t.remarks, 
     dd.DocID, 
     dd.Document, 
     dd.DocuName 
FROM ti t 
INNER JOIN History cth ON cth.tiid=t.tiid 
INNER JOIN Downloads dd ON CHARINDEX(',' + CAST(dd.DocID AS VARCHAR(10)) + ',',',' + cth.DocID + ',')>0 

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

  • Нет связанных вопросов^_^