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
  • 相关阅读:
    第15周作业
    软件工程结课作业
    第13次作业--邮箱的正则表达式
    第12次作业
    第10次作业
    Java 8 新的时间日期库
    你还在用if-else吗?
    Java并发编程:4种线程池和缓冲队列BlockingQueue
    ZooKeeper学习第八期——ZooKeeper伸缩性(转)
    ZooKeeper学习第七期--ZooKeeper一致性原理(转)
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/9394674.html
Copyright © 2011-2022 走看看