首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 为什么 in 后面跟变量或函数应该怎么写? [已结贴,结贴人:michael_monkey]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:27:27 楼主
    select count(*) from c where depName in (dbo.getChildrenDep('营销中心'))
    查询结果为0——不是预期的数量


    其中getChildrenDep是个自定义函数,根据部门名称取得所有子部门名称列表
    dbo.getChildrenDep('营销中心')取出来的值是:

    '营销中心','市场一部','市场二部','市场管理部','客户服务部'

    如果我直接查询:
    select count(*) from currentComputer where 部门 in ('营销中心','市场一部','市场二部','市场管理部','客户服务部')
    查询结果为39


    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaoku
    • 等级:
    发表于:2008-05-07 11:29:181楼 得分:2
    你应该吧这个getChildrenDep变成表值函数.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    发表于:2008-05-07 11:29:342楼 得分:1
    SQL code
    select count(*) from c where depName in (CASE dbo.getChildrenDep('营销中心') WHEN NULL THEN N'' ELSE dbo.getChildrenDep('营销中心') END)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:29:543楼 得分:1
    select count(*) from c where depName in (select dbo.getChildrenDep('营销中心') from table )
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:30:044楼 得分:4
    try:

    SQL code
    select count(*) from c where charindex(','+depName+',' , ','+dbo.getChildrenDep('营销中心')+',')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-05-07 11:30:075楼 得分:1
    select count(*) from c where depName in
    (select dbo.getChildrenDep('营销中心') from ...)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaoku
    • 等级:
    发表于:2008-05-07 11:30:186楼 得分:2
    in 后面跟变量的话,就被然为是一个整体的串而已.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:30:467楼 得分:2
    再猜  一下
    select count(*) from c where charindex(depName , (select dbo.getChildrenDep('营销中心') from table ) 0 > 0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:30:468楼 得分:1
    不懂学习一下。感觉应该是函数取出来的值对。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:32:219楼 得分:3
    SQL code
    declare @in varchar(1000) set @in = dbo.getChildrenDep('营销中心') exec ('select count(*) from currentComputer where 部门 in (' + @in + ')')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • utpcb
    • 等级:
    发表于:2008-05-07 11:34:3410楼 得分:2
    declare @in varchar(1000)

    set @in = dbo.getChildrenDep('营销中心')

    exec ('select count(*) from currentComputer where 部门 in (' + @in + ')')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:34:5511楼 得分:0
    引用 1 楼 xiaoku 的回复:
    你应该吧这个getChildrenDep变成表值函数.


    什么是表值函数.?如何改
    我的函数返回字符串,应该满足表值函数的条件吧?
    ALTER  FUNCTION dbo.getChildrenDep(@depName nvarchar(50))
    RETURNS nvarchar(500)
    AS
    BEGIN
    DECLARE @allDepName nvarchar(500)
    DECLARE @oneDepName nvarchar(50)
    declare @depId nvarchar(50)
    declare @rows int

    select @depId=dep_id from department where dep_name=@depName
    select @rows=count(*) from department where parent_partment_id=@depId

    set @allDepName=''''+@depName+''''

    declare acDep cursor for select dep_name from department where parent_partment_id=@depId
    open acDep
    while @rows>0
    begin
    fetch next from acDep into @oneDepName
    set @allDepName = @allDepName +',' + dbo.getChildrenDep(@oneDepName)
    set @rows=@rows-1
    end
    close acDep

    return @allDepName
    END
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:36:2212楼 得分:0
    靠,回帖很疯狂呀,很热心啦,一会儿这么多回帖贴,应该有答案了,我看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:40:4413楼 得分:1
    你的函数用迭代就可以了,没必要用递归。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:45:3314楼 得分:0
    引用 2 楼 ranzj 的回复:
    SQL code

    select count(*) from c
    where depName in (CASE dbo.getChildrenDep('营销中心') WHEN NULL THEN N'' ELSE dbo.getChildrenDep('营销中心') END)


    不行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:45:5015楼 得分:0
    引用 3 楼 happyflystone 的回复:
    select count(*) from c where depName in (select dbo.getChildrenDep('营销中心') from table )


    不行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:46:3216楼 得分:0
    引用 5 楼 dawugui 的回复:
    select count(*) from c where depName in 
    (select dbo.getChildrenDep('营销中心') from ...) 


    不行
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved