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

Softeer 2007-01-04 10:16:28
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 的列时发生语法错误。

请高手指教!感激涕零~
...全文
773 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Softeer 2007-01-04
  • 打赏
  • 举报
回复
感谢haonanernet(与时俱进) ,问题解决,给分
Softeer 2007-01-04
  • 打赏
  • 举报
回复
应该这样是对的了
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

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



haonanernet 2007-01-04
  • 打赏
  • 举报
回复
不好意思,没有调式
haonanernet 2007-01-04
  • 打赏
  • 举报
回复
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
Softeer 2007-01-04
  • 打赏
  • 举报
回复
谢谢,
其中set @s未定义
是不是@str?
haonanernet 2007-01-04
  • 打赏
  • 举报
回复

用下面这个:


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
haonanernet 2007-01-04
  • 打赏
  • 举报
回复
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
Softeer 2007-01-04
  • 打赏
  • 举报
回复
ListItemValue整型, @ListItemValue是varchar(8000)传递多个值过来,好像是自动会在in里面变成('14,18,22' ),这样就不合法了,应该是in(14,18,22)
如何能将那个自动的两个''号去掉,我试过用replace也不行,有什么好方法,谢谢指教
haonanernet 2007-01-04
  • 打赏
  • 举报
回复
ListItemValue 在数据库中是什么型?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧