今天在处理一个功能的时候遇到一些功能解决问题  这儿贴出来供大家参考 大家看还有什么好点方法如:表CREATE TABLE demo(
demo_id int identity primary key,
demo_name varchar(50)
)INSERT INTO demo VALUES('房地产开发')
INSERT INTO demo VALUES('房地产经纪/销售')
INSERT INTO demo VALUES('建筑业/工程/施工')1    房地产开发
2    房地产经纪/销售
3    建筑业/工程/施工另一表demo_testCREATE TABLE demo_test(
test_id int identity primary key,
demo_ids varchar(500)
)1    1,2,3
2    2,3的demo_ids 中存储了如:1,2,3想通过SQL获取demo_ids 对应的demo_name的值如上想直接用SQL获取demo_test中demo_ids对应的值=>房地产开发,房地产经纪/销售,建筑业/工程/施工对于用C#代码的话 相信这个没有任何难度就能实现以下提供sql解决方案:首先解决获取多个项的问题 这儿使用:charindexselect demo_name from demo where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 这样就获取到了
房地产开发
房地产经纪/销售
建筑业/工程/施工
下一步就是将查询得到的值合并 这儿用到:stuff,ltrim, for xml path('')SELECT stuff( (select ','+ltrim(demo_name) from demo 
               where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 for xml path('') ),1,1,'')如上 将两表联合查询就能得到想要的结果:SELECT t.test_id, demoName=(SELECT stuff( (select ','+ltrim(demo_name) from demo 
                       where charindex(CONVERT(VARCHAR,demo_id)+',',t.demo_ids+',')>0 for xml path('') ),1,1,''))
from demo_test t1    房地产开发,房地产经纪/销售,建筑业/工程/施工
2    房地产经纪/销售,建筑业/工程/施工这样的查询就可以到达预期效果了

解决方案 »

  1.   

    如果数据量大的话,可以用字符串分割函数create   function   f_splitstr(@SourceSql   varchar(8000),@StrSeprate   varchar(100))     
     returns   @temp   table(F1   varchar(100))     
      as       
      begin     
      declare   @ch   as   varchar(100)     
      set   @SourceSql=@SourceSql+@StrSeprate       
      while(@SourceSql<>'')     
                     begin     
                     set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)     
      insert   @temp   values(@ch)     
      set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')     
                      end     
      return     
      end     
          
      
    ----调用   
      select   *   from   dbo.f_splitstr('1,2,3,4',',')   
    /*
    F1                                                                                                   
    ----
    1
    2
    3
    4(所影响的行数为 4 行)
    */