表:student(id int,name varchar(10))
1 a
2 b
3 c 等select name from student where id in (1,2,3)
想写一个函数
字符串1,2,3为输入
把name连成字符串 a,b,c 输出
怎么写
急,在线等
1 a
2 b
3 c 等select name from student where id in (1,2,3)
想写一个函数
字符串1,2,3为输入
把name连成字符串 a,b,c 输出
怎么写
急,在线等
return varchar(30)
as
begin
declare @temp varchar(30)
select @temp=@temp+column2
from tb
where column1=@a
endselect colmn1,testcolmn1)
from tb
insert into @student select 1,'a'
insert into @student select 2,'b'
insert into @student select 3,'c' declare @str varchar(100)
set @str='1,2,3'select
@str=substring(replace(','+@str+',',','+rtrim(id)+',',','+name+','),2,len(replace(','+@str+',',','+rtrim(id)+',',','+name+','))-2)
from
@studentprint @str
--a,b,c
insert tb
select 1, 'AA' union all
select 2, 'BB' union all
select 3, 'CC' go
CREATE FUNCTION dbo.f_tb(@id varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + CardName FROM tb WHERE charindex(cast(CardNo as varchar(10)),@id)>0
RETURN STUFF(@str, 1, 1, '')
END
GO
declare @s varchar(10)
set @s='1,2,3'
select dbo.f_tb(@s)----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AA,BB,CC(1 行受影响)
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3--合并处理
--定义结果集表变量
DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))--定义游标并进行合并处理
DECLARE tb CURSOR LOCAL
FOR
SELECT col1,col2 FROM tb ORDER BY col1,col2
DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)
OPEN tb
FETCH tb INTO @col1,@col2
SELECT @col1_old=@col1,@s=''
WHILE @@FETCH_STATUS=0
BEGIN
IF @col1=@col1_old
SELECT @s=@s+','+CAST(@col2 as varchar)
ELSE
BEGIN
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
END
FETCH tb INTO @col1,@col2
END
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
CLOSE tb
DEALLOCATE tb
--显示结果并删除测试数据
SELECT * FROM @t
DROP TABLE tb
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO
/*==============================================*/
--3.3.2 使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1,''))
END
GO--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO/*==============================================*/
--3.3.3 使用临时表实现字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3--合并处理
SELECT col1,col2=CAST(col2 as varchar(100))
INTO #t FROM tb
ORDER BY col1,col2
DECLARE @col1 varchar(10),@col2 varchar(100)
UPDATE #t SET
@col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,
@col1=col1,
col2=@col2
SELECT * FROM #t
/*--更新处理后的临时表
col1 col2
---------- -------------
a 1
a 1,2
b 1
b 1,2
b 1,2,3
--*/
--得到最终结果
SELECT col1,col2=MAX(col2) FROM #t GROUP BY col1
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
--删除测试
DROP TABLE tb,#t
GO
/*==============================================*/--3.3.4.1 每组 <=2 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'c',3--合并处理
SELECT col1,
col2=CAST(MIN(col2) as varchar)
+CASE
WHEN COUNT(*)=1 THEN ''
ELSE ','+CAST(MAX(col2) as varchar)
END
FROM tb
GROUP BY col1
DROP TABLE tb
/*--结果
col1 col2
---------- ----------
a 1,2
b 1,2
c 3
--*/--3.3.4.2 每组 <=3 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
UNION ALL SELECT 'c',3--合并处理
SELECT col1,
col2=CAST(MIN(col2) as varchar)
+CASE
WHEN COUNT(*)=3 THEN ','
+CAST((SELECT col2 FROM tb WHERE col1=a.col1 AND col2 NOT IN(MAX(a.col2),MIN(a.col2))) as varchar)
ELSE ''
END
+CASE
WHEN COUNT(*)>=2 THEN ','+CAST(MAX(col2) as varchar)
ELSE ''
END
FROM tb a
GROUP BY col1
DROP TABLE tb
/*--结果
col1 col2
---------- ------------
a 1,2
b 1,2,3
c 3
--*/
GO
geini资料看看
set QUOTED_IDENTIFIER ON
goALTER FUNCTION [dbo].[ShowLabelName]
(
@LabelIds nvarchar(200)
)
RETURNS nvarchar(1000)
AS
BEGIN
declare @LabelNames nvarchar(1000);
Declare @i int;
Declare @Start int;
Declare @Length int;
Declare @TotalLenght int; Set @i = 1;
Set @Start = 1;
Set @Length = 0;
Set @TotalLenght = Len(@LabelIds); While(@i <= @TotalLenght)
Begin
If(SubString(@LabelIds, @i, 1) = ',')
Begin
select @LabelNames = @LabelNames + [name] from NB_LABEL_MAIN Where ID = SubString(@LabelIds, @Start, @Length);
Set @Start = @i + 1;
Set @Length = 0;
End
Else
Begin
Set @Length = @Length + 1;
End
Set @i = @i + 1;
End If(Right(@LabelIds, 1) <> ',')
Begin
select @LabelNames = @LabelNames + [name] from NB_LABEL_MAIN Where ID = SubString(@LabelIds, @Start, @Length);
End
return @LabelNames
End
Go这是我写的,头一次啊,以下是错误,谁帮我看看啊
消息 102,级别 15,状态 1,过程 ShowLabelName,第 11 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 12 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 13 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 15 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 16 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 17 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 18 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 20 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 21 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 23 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 25 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 26 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 27 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 31 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 33 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 36 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 38 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 ShowLabelName,第 40 行
'End' 附近有语法错误。
set QUOTED_IDENTIFIER ON
go ALTER FUNCTION [dbo].[ShowLabelName]
(
@LabelIds nvarchar(200)
)
RETURNS nvarchar(1000)
AS
BEGIN
declare @LabelNames nvarchar(1000);
Declare @i int;
Declare @Start int;
Declare @Length int;
Declare @TotalLenght int;
Set @i = 1;
Set @Start = 1;
Set @Length = 0;
Set @TotalLenght = Len(@LabelIds);
While(@i <= @TotalLenght)
Begin
If(SubString(@LabelIds, @i, 1) = ',')
Begin
select @LabelNames = @LabelNames + [name] from NB_LABEL_MAIN Where ID = SubString(@LabelIds, @Start, @Length);
Set @Start = @i + 1;
Set @Length = 0;
End
Else
Begin
Set @Length = @Length + 1;
End
Set @i = @i + 1;
End
If(Right(@LabelIds, 1) <> ',')
Begin
select @LabelNames = @LabelNames + [name] from NB_LABEL_MAIN Where ID = SubString(@LabelIds, @Start, @Length);
End
return @LabelNames
End
Go
insert into student select 1,'a'
insert into student select 2,'b'
insert into student select 3,'c' create function abc(@str varchar(20))
returns varchar(20)
as
begin
declare @strr varchar(50)
select @strr=isnull(@strr+',','')+name from student where charindex(ltrim(id),@str)>0
return @strr
endselect dbo.abc('1,2,3')/*
--------------------
a,b,c(1 行受影响)
*
/
比如,执行:select dbo.f_tb('11,2,3')的时候会把ID为1的记录也加如到串中,
我改了下,其他地方我没动:如下
create table tb (CardNo int,CardName varchar(10))
insert tb
select 1, 'AA' union all
select 2, 'BB' union all
select 3, 'CC' go
alter FUNCTION dbo.f_tb(@id varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + CardName FROM tb WHERE charindex(','+cast(CardNo as varchar(10))+',',','+@id+',')>0
RETURN STUFF(@str, 1, 1, '')
END
GO
declare @s varchar(10)
set @s='1,2,3'
select dbo.f_tb(@s)
drop table tb