如何从 SQL 语句中获取列名?

Mag*_*use 0 sql-server-2008

有没有简单的方法来获取从 SQL 语句返回的列名?

如:

 SELECT * 
 FROM ATable 
 FULL OUTER JOIN BTable b ON a.SOME_KEY = b.SOME_KEY
 FULL OUTER JOIN CTable c ON b.SOME_ID = c.SOME_ID
 FULL OUTER JOIN DTable d ON a.SOME_OTHER_ID = d.SOME_OTHER_ID
 WHERE a.SOME_KEY = @key AND c.SOME_SERIAL_NR = @serialnumber
Run Code Online (Sandbox Code Playgroud)

我似乎无法得到

select column_name 
from information_schema.columns 
where table_name = 'table' 
Run Code Online (Sandbox Code Playgroud)

在我当前的环境中工作

Aar*_*and 6

我更喜欢这个查询,原因有很多:

SELECT 
  [table]  = s.name + N'.' + t.name, 
  [column] = c.name
FROM sys.columns AS c
INNER JOIN sys.tables AS t
  ON c.[object_id] = t.[object_id]
INNER JOIN sys.schemas AS s
  ON t.[schema_id] = s.[schema_id]
WHERE t.name IN (N'ATable', N'BTable', N'CTable', N'DTable');
Run Code Online (Sandbox Code Playgroud)
  1. 你可以知道哪一列来自哪张表
  2. 您可以看到架构(架构很重要
  3. 您避免了损坏和不完整的INFORMATION_SCHEMA视图 - 这不会导致此特定查询出现问题,但在某些情况下您无法依赖来自INFORMATION_SCHEMA
  4. 你应该在经常使用的习惯N上的字符串文字前缀当底层数据类型nchar/nvarchar
  5. 您还应该养成使用正确语句终止符的习惯

我的解决方案的缺点:

  1. 打字需要几秒钟的时间
  2. 它不会在 Oracle、MySQL、Postgres 等上运行。