sql拼接列字符串


1.使用函數(sql2000以上)

create FUNCTION dbo.fn_dictCodesConcatByType(@filter varchar(1000))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @v varchar(8000) 
select @v =  isnull(@v + ',','')+code FROM dict WHERE type=@filter 
RETURN @v
END
GO

調用如下:

SELECT dbo.dictCodesConcatByType('Status')

 

如果你希望做成通用函數,類似如下:(其實是不可行的)

create FUNCTION dbo.fn_strConcat(@tableName varchar(100),@filedName varchar(100),@filter varchar(1000))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @v varchar(8000),@sqlStr nvarchar(2000) 
SET @v = ''
set @sqlStr=' 
select @val =  isnull(@val + '','','''')+' + @filedName+' FROM '+@tableName+' WHERE '+@filter
 
exec sp_executesql @sqlStr, N'@val varchar(8000) out', @v out 
 
RETURN @v
END
GO

由於Function里不支持  exec / sp_executesql ,所以這個是做不到的

SELECT dbo.fn_strConcat('dict','code','type=''status''')


[Err] 42000 - [SQL Server]只有函數和某些擴展存儲過程才能從函數內部執行。

 

只能修改成存儲過程方式

create PROC pr_strConcat
@tableName varchar(100),
@filedName varchar(100),
@filter varchar(1000), --不要加where
@r nvarchar(4000) output
AS
DECLARE  @sqlStr nvarchar(2000)  --這里只能用nchar,nvarchar,ntext中一個
 
set @sqlStr='select @val =  isnull(@val + '','','''')+' + @filedName+' FROM '+@tableName+' WHERE '+@filter
print @sqlStr
 
exec sp_executesql @sqlStr, N'@val varchar(8000) output', @r output 

調用如下:

DECLARE @r nvarchar(4000)
exec pr_strConcat 'dict','code','type=''status''',@r output
print @r

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM