posts - 23,  comments - 27,  trackbacks - 0

如有一个表 

 --建临时表

Create Table #TB
(
    FG_NO 
NVARCHAR(20)
    ,Part_No 
NVARCHAR(20)
)

 

 

废话就不说了 

以前的写法N累才能拿到结果,不多说 

 

 --插入测试记录

INSERT INTO #TB
SELECT 'FG1','P1' Union All 
SELECT 'FG2','P1' Union All 
SELECT 'FG3','P1' Union All 
SELECT 'FG4','P2' Union All 
SELECT 'FG5','P2' Union All 
SELECT 'FG6','P2'

--Or
INSERT INTO #TB(FG_NO,Part_No) Values('FG1','P1'),('FG2','P1'),('FG3','P1'),('FG4','P2'),('FG5','P2'),('FG6','P2');

--记得以前使用ACCESS的时候是FG_NO +FG_NO就能合并到一行
SELECT Part_No,FG_NO
FROM (SELECT DISTINCT Part_No FROM #TB) A OUTER APPLY(
        
SELECT FG_NO= STUFF(REPLACE(REPLACE(
            (
                
SELECT FG_NO FROM #TB N
                
WHERE Part_No = A.Part_No
                
FOR XML AUTO
            ), 
'<N FG_NO="'','), '"/>'''), 11'')
)N


--结果
--
Part_No    FG_NO
--
P1       FG1,FG2,FG3
--
P2       FG4,FG5,FG6

 

 

posted @ 2010-07-18 10:06 Shannon 阅读(65) 评论(0) 编辑

先看代码

Create   Procedure   up_test1   as   
    
Select   '1111'   --这里没有问题   
go   
Create   Procedure   up_test2  AS   
    
create   table   #tt   (a   Varchar(4))
    
insert   into   #tt   Exec   up_test1    
go   
Create   Procedure   up_test3   as   
    
Create   Table   #ttt   (b   varchar(4))   
    
Insert   Into   #ttt   Exec   up_test2      
go   
     


exec   up_test3   --这个执行就不能通过。  

 

 

 

经过向BAIDU GOOGLE 等大仙求救都无任何音讯后自己摸索 

 简单更改了一下存储过程就能执行通过

 

--
--
 Create   Procedure   up_test1   as   
--
    Select   '1111'   --这里没有问题   
--
go 
  
Alter   Procedure   up_test2  AS   
    
create   table   #tt   (a   Varchar(4))
    
Declare  @strsql nvarchar(2000)
    
set  @strsql='insert   into   #tt'
    
Exec   up_test1   

go   
--Create   Procedure   up_test3   as   
--
    Create   Table   #ttt   (b   varchar(4))   
--
    Insert   Into   #ttt   Exec   up_test2      
--
go   
     

exec   up_test3   --这个执行就能通过。 

 

 

……

 

有时候稍微转个小弯就能搞定问题 

posted @ 2010-07-18 09:38 Shannon 阅读(578) 评论(1) 编辑