2012-05-31 55 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(最大值))

在存储过程中,我比较喜欢

SELECT * FROM AUS_CID_Cases 
WHERE 
AddedBy IN (@raisedByLogin) 

哪里@raisedByLogin是我传递的参数之一,这些值。它的值如下:@ raisedByLogin =“4,2,1”

AddedBy has datatype bigint。

当我运行代码时,我得到错误为“Error conversion data type varchar to bigint。”。据我所知,这是因为AddedBy列有数据类型bigint。我无法更改该数据类型。

然而,当我投AddedBy像

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

我不明白的错误,但没有被选中即我没有得到来自SELECT语句的任何结果。

我该怎么办?

回答

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

相关问题