将数据类型varchar转换为bigint时出错

时间:2012-05-31 08:04:26

标签: c# asp.net sql sql-server

我正在从列表框中检索值并将其格式化为字符串

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是我传递的参数之一。它的值如@raisedByLogin =" 4,2,1"

AddedBy的数据类型为bigint。

当我运行代码时,我得到错误"将数据类型varchar转换为bigint时出错。" ..我理解这是因为AddedBy列的数据类型为bigint。我无法更改该数据类型。

然而,当我像

一样投射AddedBy时
SELECT * FROM AUS_CID_Cases
WHERE
CAST(AddedBy as VARCHAR) IN ( @raisedByLogin )

我没有收到错误,但没有选择任何内容,即我没有从select语句中获得任何结果。

我该怎么办?

2 个答案:

答案 0 :(得分: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上方找到了,并设法在某个时候解决了这个问题......

答案 1 :(得分:0)

尝试在存储过程中构建SQL select查询并在此之后执行。

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?以获取更多信息