Преобразование varchar в int SQl server 2005

#asp.net #mysql #sql #sql-server-2005 #tsql

#asp.net #mysql #sql #sql-server-2005 #tsql

Вопрос:

У меня есть простая таблица sql, в которой есть имя двух столбцов, и оба идентификатора — varchar (10); Теперь у меня есть значение в таблице типа (‘Test’, ‘1,2,3’). У нас есть другая таблица для получения полных сведений о сотруднике , но столбец Ids в tblEmployee имеет значение int. следующий SQL выдаст ошибку,

Выберите * из tblEmployee, где идентификаторы в (Выберите идентификаторы из tblNameId, где name =’Test’);

Ошибка: не удается преобразовать 1,2,3 в int. Это их способ преобразовать все значения в int или любой другой обходной путь.

Спасибо.

Ответ №1:

Используйте следующую функцию для разделения текста

 CREATE FUNCTION dbo.Split(@String varchar(8000))     
returns @temptable TABLE (items int)     
as     
begin     
    declare @idx int     
    declare @slice varchar(8000)     

    select @idx = 1     
        if len(@String)<1 or @String is null  return     

    while @idx!= 0     
    begin     
        set @idx = charindex(',',@String)     
        if @idx!=0     
            set @slice = left(@String,@idx - 1)     
        else     
            set @slice = @String     

        if(len(@slice)>0)
            insert into @temptable(Items) values(CONVERT(INT, @slice))     

        set @String = right(@String,len(@String) - @idx)     
        if len(@String) = 0 break     
    end 
return     
end
  

Затем

 Select * from tblEmployee where Ids in dbo.Split(Select Ids from tblNameId where name='Test');
  

(адаптировано с этого сайта: http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx )

Ответ №2:

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

 select  * 
from    tblEmployee e
join    tblNameId ni
on      ','   ni.Ids   ',' like '%,'   cast(e.Ids as varchar(12))   ',%'
  

Более чистый дизайн привел бы к нормализации tblNameId таблицы с одной строкой для каждого идентификатора сотрудника.

Комментарии:

1. like может быть очень медленным в зависимости от данных