日期:2014-05-17  浏览次数:20472 次

这个变量该怎么定义?
create function [dbo].[GetUserName](@ColunmValue nvarchar(50))
returns varchar(8000)
as
begin
DECLARE @RetVal varchar(8000) 
SET @RetVal = '' 
select @RetVal = name + ',' + @RetVal  from [Dealer] 
where id in (@ColunmValue)
IF LEN(@RetVal) > 0 
SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)
return (@Retval)
end

我是想通过上述的方法,获取所有用户名,条件是用户id集合,如:“1,2,3,”,“2,3,5,”
等等。
如果用户id只有一个的时候没问题,但是多了就会报错,类型转换失败。
各位看看怎么定义这个变量?
SQL 变量 函数 select

------解决方案--------------------
个人建议从前端对你的id列进行拆分,变成一个表,然后In,不然当列太多的时候,你这种写法会导致编译失败
------解决方案--------------------
create function [dbo].[GetUserName](@ColunmValue nvarchar(50))
returns varchar(8000)
as
begin
DECLARE @RetVal varchar(8000) 
SET @RetVal = '' 
select @RetVal = name + ',' + @RetVal  from [Dealer] 
where id in (@ColunmValue) --这儿写的不对,如果你传了个"1,2,3",会把"1,2,3"转化成整型,会报错的
IF LEN(@RetVal) > 0 
SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)
return (@Retval)
END
go

--改成:
create function [dbo].[GetUserName](@ColunmValue nvarchar(50))
returns varchar(8000)
as
begin
DECLARE @RetVal varchar(8000) 
SET @RetVal = ''
DECLARE @temp TABLE(NAME NVARCHAR(255))
INSERT @temp 
EXEC('SELECT name FROM [Dealer] where id in ('+ @ColunmValue +')')
select @RetVal = name + ',' + @RetVal  from @temp
IF LEN(@RetVal) > 0 
SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)
return (@Retval)
END

------解决方案--------------------
where id in (@ColunmValue)