zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    流的创建复制文件
    面试题
    异常
    多态
    继承
    【java】:Junit
    【Java】:ehcache
    【Java】:压缩成多个压缩卷
    【java】:常用工具类
    【javascript】:Highcharts实战
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/9394674.html
Copyright © 2011-2022 走看看