当前位置: 代码迷 >> ASP.NET >> 困扰很久的sql存储过程(转换为数据类型为 int 的列时发生语法异常)
  详细解决方案

困扰很久的sql存储过程(转换为数据类型为 int 的列时发生语法异常)

热度:6601   发布时间:2013-02-26 00:00:00.0
困扰很久的sql存储过程(转换为数据类型为 int 的列时发生语法错误)
CREATE   PROCEDURE     GetDisplayNameByBatchAttibuteValues
(
@ListItemValue   varchar(8000),
@ListDisplayName     varchar(8000)   output
)
AS

begin
declare   @str   varchar(8000)  

  set   @str   = ' '
  select   @str   =   @str   + ', '   +   ListDisplayName     from   ProductAttributeLookupListItems   where   ListItemValue   in(@ListItemValue)  

  set     @ListDisplayName=stuff(@str,1,1, ' ')
print   @ListDisplayName
end
GO

@ListItemValue   传递14,18,22这样的子符串
错误:
System.Data.SqlClient.SqlException:   将   varchar   值   '14,18,22 '   转换为数据类型为   int   的列时发生语法错误。

请高手指教!感激涕零~

------解决方案--------------------------------------------------------
CREATE PROCEDURE GetDisplayNameByBatchAttibuteValues
(
@ListItemValue varchar(8000),
@ListDisplayName varchar(8000) output
)
AS

begin
declare @str varchar(8000)


declare @tb table(a int)
while charindex( ', ',@s)> 0
begin
insert @tb values(cast(left(@s,charindex( ', ',@ListItemValue )-1) as int))
set @s = stuff(@ListItemValue ,1,charindex( ', ',@ListItemValue ), ' ')
end
insert @tb values(@ListItemValue)

set @str = ' '
select @str = @str + ', ' + ListDisplayName from ProductAttributeLookupListItems where ListItemValue in(select a from @tb)

set @ListDisplayName=stuff(@str,1,1, ' ')
print @ListDisplayName
end
GO
  相关解决方案