各位大侠,问个问题啊 有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 时失败。有人知道我应该怎么写么?
希望高人能解答,谢谢!
用户表: 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 时失败。有人知道我应该怎么写么?
希望高人能解答,谢谢!
100008
的格式,这个转换代码,论坛N多。
然后再in
username
from
userinfo a,tasklist b
where
charindex(',',','+taskid+',',','+taskExecutor+',')>0
and
b.taskid='20110328'
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
);
inner join taskList B on B.Executor like '%'+ltrim(A.userid)+'%'
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试试这个