declare @t table(id int,c varchar(10))
insert into @t select 1,'张三'
union all select 2,'李四'
union all select 3,'王五'declare @cc varchar(10),@tid intset @cc=''
select @cc=@cc+','+cast(c as varchar(10))
from @t a
where id in (1,2,3)select right(@cc,len(@cc)-1)
insert into @t select 1,'张三'
union all select 2,'李四'
union all select 3,'王五'declare @cc varchar(10),@tid intset @cc=''
select @cc=@cc+','+cast(c as varchar(10))
from @t a
where id in (1,2,3)select right(@cc,len(@cc)-1)
解决方案 »
- 命名管道: \\.\pipe\sql\query ,这个设置是什么意思呢?请大家说说
- 一张物料价格表,一张物料历史价格表。两表如何纵向连接?
- 请问一个简单的SQL语句或则存储过程,来者有分。
- 执行触发器报207错误,字段bill_memName 不存在,可是bill表确实有bill_memName
- 如何提高这个语句的速度,送分!
- mysql数据库数据如何导入到SQL SERVER中?
- 请问这样的sql怎么写?
- sql server 7.0初学者
- 如何在SQL server的表中添加一行时使得其中一个列的值自动增加1。
- 最后一帖!不问问题了,有太多问题,但已没分可用了,感谢坛中老师们的帮忙,谢谢!
- 问一个基础问题:在建SQL数据库的时候要不要限制日志文件的大小??在线等。
- SQL SERVER 内存中的页的大小是多少
create function f_qry(
@str varchar(100)
)returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+name
from [user]
where charindex(','+cast(id as varchar)+',',','+@str+',')>0
return(stuff(@re,1,1,''))
end
go--调用
select dbo.f_qry('1,2,3')
SET @IDs = '1,2' --注意,逗号分隔DECLARE @sql VARCHAR(8000)
SET @sql = '
SELECT *
FROM 表
WHERE [ID] IN (' + @IDs + ')
'PRINT @sql
EXEC(@sql)
declare @s varchar(8000)
set @s=''
select @s=@s+','+name from [user] where id in (1,2)
print right(@s,len(@s)-1)
我想是我的表达不够准确,我在表2里面的一个字段"gg"的内容就是诸如
“1,2,3,4,5,...”等等,然后查询得结果时想把它转换成对应的名字 如“张三,李四,王五,...” “1,2,3,4,5,...”中的数字还是id 号,就在表user里面。
我试了你给我的方法,查询时得出来的结果的第一个名字显示不出来,且最多显示4个人的名字,我对这方面是个新手,还请帮忙,谢谢!
create table [user](id int,name varchar(10))
insert [user] select 1,'张三'
union all select 2,'李四'
union all select 3,'王五'
union all select 4,'五四'
union all select 5,'立六'
union all select 6,'工七'
union all select 7,'我八'
go--处理函数
create function f_qry(
@str varchar(100)
)returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+name
from [user]
where charindex(','+cast(id as varchar)+',',','+@str+',')>0
return(stuff(@re,1,1,''))
end
go--调用
select dbo.f_qry('1,2,3')
select dbo.f_qry('1,2,3,5,6,7')
go--删除测试
drop table [user]
drop function f_qry/*--测试结果:---------------------------------
张三,李四,王五(所影响的行数为 1 行)
---------------------------------
张三,李四,王五,立六,工七,我八(所影响的行数为 1 行)
--*/
@str varchar(100)
)returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+rtrim(name) --如果你的name是char/nchar类型
from [user]
where charindex(','+cast(id as varchar)+',',','+@str+',')>0
return(stuff(@re,1,1,''))
end
go
create function f_qry(
@str varchar(100)
)returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
while charindex(',',@str)>0
begin
select @re=@re+','+ltrim(rtrim(name))
from [user]
where id=left(@str,charindex(',',@str)-1)
set @str=right(@str,len(@str)-charindex(',',@str))
end
select @re=@re+','+ltrim(rtrim(name))
from [user]
where id=cast(@str as int) return(stuff(@re,1,1,''))
end
go--调用
select dbo.f_qry('1,2,3')
select dbo.f_qry('1,3,2')
go--返回
(所影响的行数为 7 行)
---------------
张三,李四,王五(所影响的行数为 1 行)
---------------
张三,王五,李四(所影响的行数为 1 行)
在调用语句这里用 select dbo.f_qry('1,2,3')确实都行,
但我的意思是用列名也就是字段名比如“gg”来表示,如何写呢?(不要笑我问得太菜,因为我本身就很菜,向各位学习!)
我用的就是这个,也就是出现了第一行没有,多于四个就显示不出来的问题?