我正在从列表框中检索值并将其格式化为字符串
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语句中获得任何结果。
我该怎么办?
答案 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?以获取更多信息