2012-05-31 4 views
1

Я извлечения значений из выпадающего списка и форматирование их в строку, какТип ошибки преобразования данных VARCHAR в BigInt

if (lbRaisedByLogin.SelectedIndex != -1) 
    { 
     foreach (ListItem item in lbRaisedByLogin.Items) 
     { 
      if (item.Selected == true) 
      { 
       sb.AppendFormat("{0},", item.Value); 
      } 
     } 

     searchCase.raisedByLogin = sb.ToString().TrimEnd(Convert.ToChar(",")); 
     sb.Length = 0; 
    } 

я передаю эти строки в процедуре хранения в качестве параметров (Datatype-- Varchar (Max))

в хранимой процедуре я сравниваю эти значения как

SELECT * FROM AUS_CID_Cases 
WHERE 
AddedBy IN (@raisedByLogin) 

Где @raisedByLogin является одним из параметров я прошел. Он имеет такие значения, как @ raiseByLogin = "4,2,1"

AddedBy имеет тип данных bigint.

При запуске кода я получаю сообщение об ошибке «Ошибка преобразования типа данных varchar в bigint». Я понимаю, что это потому, что столбец AddBy имеет тип данных bigint. Я не могу изменить этот тип данных.

Однако, когда я бросил AddedBy как

SELECT * FROM AUS_CID_Cases 
WHERE 
CAST(AddedBy as VARCHAR) IN (@raisedByLogin) 

я не получаю ошибку, но ничего не выбрано то есть я не получаю никакого результата от оператора выбора.

Что я могу сделать?

ответ

1

Сначала создайте этот вид

CREATE FUNCTION [dbo].[Split](@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (items varchar(8000))  
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(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

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

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

затем изменить запрос на это и попытаться,

SELECT * FROM AUS_CID_Cases 
WHERE 
CAST(AddedBy as VARCHAR) IN (select * from split(@raisedByLogin,',')) 

найденные выше функции here, и управление чтобы решить эту проблему когда-нибудь ...

+0

Большое вам спасибо ... это очень помогло мне. – user1181942

0

попытайтесь создать запрос выбора SQL внутри хранимой процедуры и выполнить после этого.

DECLARE @raisedByLogin varchar(600) 

SET @SQL = 
'SELECT * FROM AUS_CID_Cases 
WHERE 
    AddedBy IN (' + @raisedByLogin + ')' 

EXEC(@SQL) 

проверка How to pass a list of values or array to SQL Server stored procedure? для получения дополнительной информации

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