当前位置: 代码迷 >> Sql Server >> 关于SQL SERVER 存储过程取不到值的有关问题
  详细解决方案

关于SQL SERVER 存储过程取不到值的有关问题

热度:75   发布时间:2016-04-24 10:57:15.0
关于SQL SERVER 存储过程取不到值的问题
小弟现在有这么一个需求,提供一个查询功能,查询字段不定,按照用户填写的内容查询指定字段,我以前根据控件是否为空拼接SQL语句,现在用存储过程实现,参考论坛里的一篇帖子修改,代码如下,但是取不到任何记录,这个存储过程哪里有问题吗?(非计算机专业,毕业设计要用到,半路出家,基础不熟,求指教)
CREATE PROCEDURE getDepList
(
    @部门ID           CHAR(4),
    @部门简介         TEXT,
    @部门名           NVARCHAR(20),
    @负责人           NVARCHAR(10),
    @部门等级         CHAR(2),
    @部门人数上限     INT,
    @部门人数下限     INT,
    @部门电话         CHAR(11),
    @日期下限         DATETIME,
    @日期上限         DATETIME,
    @启用             CHAR(2),
    @上级部门         NVARCHAR(20)
)
AS
SELECT 部门ID,
       部门名,
       负责人,
       部门等级,
       部门人数,
       部门电话,
       成立日期,
       启用,
       上级部门,
       部门简介
FROM   部门信息
WHERE  部门ID LIKE '%' + cast(ISNULL(@部门ID, '')as varchar) + '%'
       AND 部门名 LIKE '%' + ISNULL(@部门名, '') + '%'
       AND 负责人 LIKE '%' + ISNULL(@负责人, '') + '%'
       AND 部门等级 LIKE '%' + ISNULL(@部门等级, '') + '%'
       AND 部门人数 BETWEEN (ISNULL(@部门人数下限, 0)) AND (ISNULL(@部门人数上限, POWER(2, 30)))
       AND 部门电话 LIKE '%' + ISNULL(@部门电话, '') + '%'
       AND 成立日期 BETWEEN (
               ISNULL(@日期下限, CAST('1900-01-01 01:00:00.000' AS DATETIME))
           )
           AND (ISNULL(@日期上限, GETDATE()))
       AND 启用 LIKE '%' + ISNULL(@启用, '') + '%'
       AND 上级部门 LIKE '%' + ISNULL(@上级部门, '') + '%'
       AND 部门简介 LIKE '%' + ISNULL(CAST(@部门简介 AS VARCHAR), NULL) +
           '%'
GO

------解决方案--------------------

CREATE PROCEDURE GetSomething
(@课程名 varchar(10))
as
select * from Course where Cname like '%'+cast(isnull(@课程名,'') as varchar)+'%'
print cast(isnull(@课程名,'') as varchar)


exec GetSomething ''


我按照你的写法写了一个测试sp,可以正常查询到数据

这样吧,你把你的where 条件,全部去掉,
肯定能查到值吧
然后一个一个地加上(查询字段)
看看问题出在那个地方
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:



AND 部门简介 LIKE '%' + ISNULL(CAST(@部门简介 AS VARCHAR), NULL) +
               '%'
---這里改庫
AND 部门简介 LIKE '%' + ISNULL(CAST(@部门简介 AS VARCHAR), '') +
               '%'
不行的,刚开始也是这么写的,只保留第一句都去不到记录


把where中的条件都修改成这样,加上isnull:

isnull(部门ID,'') LIKE '%' + cast(ISNULL(@部门ID, '')as varchar) + '%'
           AND isnull(部门名,'') LIKE '%' + ISNULL(@部门名, '') + '%'
           AND isnull(负责人,'') LIKE '%' + ISNULL(@负责人, '') + '%'

后面的其他条件,也这么修改
还是取不到呢。。。我试了下这一条语句,也是取不到值,是不是like这种写法有问题呢
DECLARE @ID CHAR(9)
SELECT @ID=''
SELECT * FROM 员工信息
WHERE 工号 LIKE '%'+ISNULL(@ID,'')+'%'


你用sql profiler跟踪一下把,或者你有qq吗,帮你看一下
  相关解决方案