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
随手敲的,不排除手误---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
浙公网安备 33010602011771号