首页 新闻 会员 周边 捐助

存储过程的参数str后有空格,请问如何解决?

0
悬赏园豆:10 [已解决问题] 解决于 2013-11-29 11:50

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
ALTER PROCEDURE [dbo].[Pro_GetCateSonID]
    @Channel_id int,    --频道ID
    @Parent_id    int        --分类ID
AS
    declare @strSQL   nvarchar(1000)
BEGIN
    SET NOCOUNT ON;
    set @strSQL='SELECT id FROM dt_category WHERE channel_id='+str(@Channel_id)+' and class_list like ''%,'+str(@Parent_id)+',%'' ORDER BY id ASC'
END
print(@strSQL)
exec (@strSQL)

调用方法:


DECLARE    @return_value int

EXEC    @return_value = [dbo].[Pro_GetCateSonID]
        @Channel_id = 6,
        @Parent_id =48

SELECT    'Return Value' = @return_value

GO

打印出的SQL语句多了很多空格。

SELECT id FROM dt_category WHERE channel_id=         6 and class_list like '%,        48,%' ORDER BY id ASC
id
-----------

Return Value
------------
0

(1 行受影响)

这样模糊查询根本就查不出来结果。求助

PKSEO_dudu的主页 PKSEO_dudu | 初学一级 | 园豆:9
提问于:2013-11-01 09:36
< >
分享
最佳答案
0

@Channel_id int,    --频道ID
    @Parent_id    int        --分类ID

参数用nvarchar代替,解决

PKSEO_dudu | 初学一级 |园豆:9 | 2013-11-01 10:07
其他回答(2)
0

mssql 中不是有 TRIM 函数么? 另外,客户输入那边为什么不trim啊?

收获园豆:5
飞扬的尘埃 | 园豆:1318 (小虾三级) | 2013-11-01 09:41

我直接数据库调试的,参数设置的是int类型,不应该包含了空格啊!

mssql没trim函数。奇怪!

支持(0) 反对(0) PKSEO_dudu | 园豆:9 (初学一级) | 2013-11-01 09:48

@PKSEO_dudu: 你认为int类型是几个字节,你将int类型作为LIKE的参数,出现前导空格不是很正常的吗?

另外,你试试 SELECT LTRIM('      ABC')

支持(0) 反对(0) 飞扬的尘埃 | 园豆:1318 (小虾三级) | 2013-11-01 10:42

@PKSEO_dudu: 另外,还有一个RTRIM(),不过,你这里用不上。

支持(0) 反对(0) 飞扬的尘埃 | 园豆:1318 (小虾三级) | 2013-11-01 10:43
0

不要str这样的东东,可以选择用cast(变量 as varchar(500)),或者Convert(varchar(50),字段)这样的函数写法。

收获园豆:5
幻天芒 | 园豆:37205 (高人七级) | 2013-11-01 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册