各位大侠,问个问题啊  有2个表 用户表和用户任务表
用户表: userinfo
userid   username   userpwd 
10001    张三       123456
10002    李四       123456用户任务表 tasklist
taskid    taskComments taskExecutor
20110328    检查机房      10001;10002
20110328    8点开会       10001用户任务表里的 taskExecutor 字段对应的是userid的值,但是 taskExecutor 字段可能会存多个userid,他们以半角分号分割。用户表的userid是int型,而用户任务表里 taskExecutor 是 varchar 型 现在的问题是,我想去用户表里查询这些用户id所对应的用户名,因为用户表里的用户id字段是int型的 如果我这样写是会报错的: select username from userinfo where userid in(taskExecutor Executor form taskList where taskid='20110328') 
SQL 错误:
在将 varchar 值 '10001,10008' 转换成数据类型 int 时失败。有人知道我应该怎么写么?
希望高人能解答,谢谢!

解决方案 »

  1.   

    10001,10008转换为100001
    100008
    的格式,这个转换代码,论坛N多。
    然后再in
      

  2.   

    select
      username
    from
      userinfo a,tasklist b
    where
      charindex(',',','+taskid+',',','+taskExecutor+',')>0
    and
      b.taskid='20110328'
      

  3.   


    use tempdb;
    /*
    create table userinfo
    (
    userid int not null,
    username nvarchar(10) not null,
    userpwd int not null 
    );
    insert into userinfo(userid,username,userpwd)
    values
    (10001,'张三',123456),
    (10002,'李四',123456);create table tasklist
    (
    taskid nvarchar(10) not null,
    taskComments nvarchar(10) not null,
    taskExecutor nvarchar(50) not null
    );
    insert into tasklist(taskid,taskComments,taskExecutor)
    values
    ('20110328','检查机房','10001;10002'),
    ('20110328','8点开会','10001');
    */
    select username 
    from userinfo 
    where userid in
    (
    SELECT 
    B.taskExecutor
    FROM(
      SELECT [taskid], [taskExecutor] = CONVERT(xml,'<root><v>' + REPLACE([taskExecutor], ';', '</v><v>') + '</v></root>') FROM tasklist
    )A
    OUTER APPLY(
      SELECT taskExecutor = N.v.value('.', 'varchar(100)') FROM A.[taskExecutor].nodes('/root/v') N(v)
    )B
    );
      

  4.   

    试试这个,突然想到的,没试过,吼吼select username from userinfo A 
    inner join taskList B on B.Executor like '%'+ltrim(A.userid)+'%'
      

  5.   


    create table t1
    (
    uid int,
    uname varchar(10),
    upwd int
    )
    insert into t1
    select 10001, '张三', 123456 union all
    select 10002, '李四', 123456
    create table t2
    (
    tid int,
    tcon varchar(50),
    texe varchar(50)
    )
    insert into t2
    select 20110328, '检查机房', '10001;10002' union all
    select 20110328, '8点开会', '10001'
    --select * from t1
    --select * from t2select *,stuff((select ';'+uname from t1 where charindex(convert(varchar,t1.uid),t.texe)>0 for xml path('')),1,1,'') as texe 
    from t2 t试试这个