VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 649|回复: 9

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

[复制链接]

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-18 08:30:01 | 显示全部楼层 |阅读模式
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 的列时发生语法错误。

请高手指教!感激涕零~
回复

使用道具 举报

0

主题

41

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-22 14:45:01 | 显示全部楼层
ListItemValue 在数据库中是什么型?
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-22 23:30:01 | 显示全部楼层
ListItemValue整型, @ListItemValue是varchar(8000)传递多个值过来,好像是自动会在in里面变成('14,18,22' ),这样就不合法了,应该是in(14,18,22)
如何能将那个自动的两个''号去掉,我试过用replace也不行,有什么好方法,谢谢指教
回复

使用道具 举报

0

主题

41

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-23 14:15:01 | 显示全部楼层
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
回复

使用道具 举报

0

主题

41

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-23 15:30:02 | 显示全部楼层

用下面这个:


CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
(
@ListItemValue varchar(8000),
@ListDisplayName  varchar(8000) output
)
AS

begin
declare @str varchar(8000)


declare @tb table(a int)
while  charindex(',',@ListItemValue )>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
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-24 03:15:01 | 显示全部楼层
谢谢,
其中set @s未定义
是不是@str?
回复

使用道具 举报

0

主题

41

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-24 20:45:01 | 显示全部楼层
CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
(
@ListItemValue varchar(8000),
@ListDisplayName  varchar(8000) output
)
AS

begin
declare @str varchar(8000)


declare @tb table(a int)
while  charindex(',',@ListItemValue )>0
begin
insert  @tb values(cast(left(@ListItemValue,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
回复

使用道具 举报

0

主题

41

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-24 21:30:02 | 显示全部楼层
不好意思,没有调式
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-25 12:45:01 | 显示全部楼层
应该这样是对的了
CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
(
@ListItemValue varchar(8000),
@ListDisplayName  varchar(8000) output
)
AS

begin
declare @str varchar(8000)


declare @tb table(a int)
while  charindex(',',@ListItemValue )>0
begin
insert  @tb values(cast(left(@ListItemValue,charindex(',',@ListItemValue )-1) as int))
set @ListItemValue = 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,'')

end
GO

但是没有返回结果,很奇怪



回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-25 16:15:01 | 显示全部楼层
感谢lisongfox ,问题解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表