【问题标题】:Error converting data type varchar to bigint将数据类型 varchar 转换为 bigint 时出错
【发布时间】:2012-06-05 11:24:55
【问题描述】:

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

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 时出错。”的错误。我理解这是因为 AdditionalBy 列的数据类型为 bigint。我无法更改该数据类型。

但是当我像 AddBy 一样投射时

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

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

我能做什么?

【问题讨论】:

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


    【解决方案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上方找到,并设法解决了这个问题……

    【讨论】:

      【解决方案2】:

      尝试在存储过程中构建 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?了解更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 2012-03-16
        • 1970-01-01
        相关资源
        最近更新 更多