1

リストボックスから値を取得し、文字列で次のようにフォーマットしています

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 は、渡したパラメーターの 1 つです。@raisedByLogin="4,2,1" のような値があります

addedBy のデータ型は bigint です。

コードを実行すると、「データ型 varchar から bigint への変換エラー」というエラーが表示されます..AddedBy 列のデータ型が bigint であるためだと理解しています。そのデータ型を変更することはできません。

ただし、AddedBy のようにキャストすると

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

エラーは発生しませんが、何も選択されていません。つまり、select ステートメントから結果が得られません。

私に何ができる?

4

2 に答える 2

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,',') )

上記の関数がここにあり、いつかこの問題を解決することができました...

于 2012-05-31T08:47:00.163 に答える
0

ストアド プロシージャ内で SQL 選択クエリを作成し、その後実行してみてください。

DECLARE @raisedByLogin varchar(600)

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

EXEC(@SQL)  

check値のリストまたは配列を SQL Server ストアド プロシージャに渡す方法は? 詳細については

于 2012-05-31T08:14:21.713 に答える