我是白盒测试我们数据库上的一个宽表的单行(我们几乎每个大型开发都会这样做。)
因此我们通过主键进行简单的选择:
SELECT * FROM MYTAB WHERE MYKEY = 42;
这产生了大量的列(为了这个例子,让我们说26 - 请不要挂断数据,这纯粹是为了示例)。
Alpha . . . Zulu
----- ----
237902 RABBIT
(1 row(s) affected)
是否有一种输出方式,以便每列获得它自己的输出所以:
Alpha
-----
237902
(1 row(s) affected)
.
.
.
Zulu
----
RABBIT
(1 row(s) affected)
或者每列被强制到下一行,所以:
Alpha
-----
237902
.
.
.
Zulu
----
RABBIT
(1 row(s) affected)
我正在使用SQL Server Management Studio。
答案 0 :(得分:1)
使用动态SQL的强大功能:
<强> LiveDemo 强>
CREATE TABLE #tab(
ID INTEGER NOT NULL PRIMARY KEY
,Name VARCHAR(7) NOT NULL
,Age INT NOT NULL);
INSERT INTO #tab(ID,Name, Age) VALUES (1,'John', 14), (2,'Jane', 23);
INSERT INTO #tab(ID,Name, Age) VALUES (3,'Joe', 34), (4,'Jimmy', 54);
DECLARE
@col_name NVARCHAR(128) = NULL,
@table_name NVARCHAR(128) = '#tab',
@counter INT = 1,
@id INT = 1,
@sql NVARCHAR(MAX) = '';
SELECT COLUMN_NAME, ORDINAL_POSITION
INTO #columns
FROM tempdb.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE @table_name + '%';
WHILE @counter <= (SELECT COUNT(*) FROM #columns)
BEGIN
SELECT @col_name = COLUMN_NAME
FROM #columns
WHERE ORDINAL_POSITION = @counter;
SET @sql +=
N'
SELECT <col_name>
FROM <table_name>
WHERE ID = @id';
SET @sql = REPLACE(@sql, '<col_name>', @col_name);
SET @sql = REPLACE(@sql, '<table_name>', @table_name);
SET @counter += 1;
END
EXEC [dbo].[sp_executesql]
@sql
,N'@id INT'
,@id;
输出:
╔════╗
║ ID ║
╠════╣
║ 1 ║
╚════╝
╔══════╗
║ Name ║
╠══════╣
║ John ║
╚══════╝
╔═════╗
║ Age ║
╠═════╣
║ 14 ║
╚═════╝
警告:的
示例表来自我之前的示例,但我希望您不要介意。