• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
云端...
...
博客园    首页    新随笔    联系   管理    订阅  订阅

因为空格浪费了我1个小时的时间

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_Customer_SCode]
    (
        @SCODE nchar(20)
    )
AS
    SET NOCOUNT ON
    SELECT Customer.NAME AS 客户名称, Customer.ADDRESS AS 地址,
          Customer.LEADER AS 负责人, Customer.DUTY AS 职务, Customer.PHONE AS 电话,
          Customer.MPHONE AS 手机, Customer.EMAIL, Customer.POSTALCODE AS 邮编,
          [User].NAME AS 跟单人, Customer.SCODE AS 缩码, Customer.ID
    FROM Customer INNER JOIN
          [User] ON Customer.USERID = [User].ID
    WHERE (Customer.SCODE LIKE '%'+@SCODE+'%')
    ORDER BY Customer.ADDRESS DESC
    RETURN

/////////////////////////////////////////////////////////////////////////////////////////////////

 

 

USE [EastCustomer]


GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[sp_Customer_SCode]
        @SCODE = N'%K%'

SELECT    'Return Value' = @return_value

GO

测试结果永远都是0行。最后发现因为参数定义为20个字符,在参数传进来后,sqlserver自动正在变量后补空格到20为,所以模糊匹配的时候就找不到了,解决方法只要加“RTRIM()”就可以了

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_Customer_SCode]
    (
        @SCODE nchar(20)
    )
AS
    SET NOCOUNT ON
    SELECT Customer.NAME AS 客户名称, Customer.ADDRESS AS 地址,
          Customer.LEADER AS 负责人, Customer.DUTY AS 职务, Customer.PHONE AS 电话,
          Customer.MPHONE AS 手机, Customer.EMAIL, Customer.POSTALCODE AS 邮编,
          [User].NAME AS 跟单人, Customer.SCODE AS 缩码, Customer.ID
    FROM Customer INNER JOIN
          [User] ON Customer.USERID = [User].ID
    WHERE (Customer.SCODE LIKE '%'+RTRIM(@SCODE)+'%')
    ORDER BY Customer.ADDRESS DESC
    RETURN

Technorati 标签: Edward
posted @ 2009-03-06 15:58  起云  阅读(127)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3