BY fcuandy
随手敲的,不排除手误---CSDN

向其学习!

CREATE
TABLE tb(A VARCHAR(50),B VARCHAR(50),C VARCHAR(50),D VARCHAR(50),E VARCHAR(50))
INSERT tb SELECT   2,3,4,5,6
UNION   ALL   SELECT   1,2,NULL,5,7
UNION   ALL   SELECT   1,3,4,5,NULL
UNION   ALL   SELECT   NULL,3,4,5,NULL
GO

SELECT * FROM tb
GO
/*
A    B    C    D    E
--------------------------
2    3    4    5    6
1    2    NULL    5    7
1    3    4    5    NULL
NULL    3    4    5    NULL

*/

DECLARE @s1 VARCHAR(8000),@s2 VARCHAR(8000)
SELECT    @s2=ISNULL(@s2+'+''|''+','') + ' ISNULL([' + name + '],''0'')' ,
        
@s1=ISNULL(@s1+'+''|''+','') + ' (CASE WHEN ['+ name + '] IS NULL THEN ''0'' ELSE ''' + name + ''' END)'
   
FROM syscolumns WHERE id=OBJECT_ID('tb')
EXEC('SELECT ' + @s1 + ' n1,' + @s2 + ' n2 FROM tb')

GO
/*
n1        n2
----------------------
A|B|C|D|E    2|3|4|5|6
A|B|0|D|E    1|2|0|5|7
A|B|C|D|0    1|3|4|5|0
0|B|C|D|0    0|3|4|5|0
*/

DROP TABLE tb
Go


就因为这个字串定界符,使一个成为了列名,一个成为了列值
SELECT A,'A' FROM tb
posted on 2007-11-13 02:02  许维光  阅读(156)  评论(0)    收藏  举报