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)