【问题标题】:Query a query's column name in SQL Server在 SQL Server 中查询查询的列名
【发布时间】:2014-03-24 03:36:38
【问题描述】:

我想在 SQL Server 中查询列名。我知道可以从系统表中获取表的列,但不幸的是,这对我来说还不够。

示例:

我有一个包含ID 列和字符串列的表。该表的名称是test,它有一个testID 和一个test 列。

这个查询:

select column_name 
from information_schema.columns 
where table_name = 'teszt'

返回我的表的列名。所以它返回testIDTest

我想要的是当我使用这样的查询时:

select count(*) as Amount from test 

我想要一个可以返回我的查询的列名的查询。因此,在这种特定情况下,它返回字符串“金额”。不知道有没有可能。

【问题讨论】:

    标签: sql-server sql-server-2012-express


    【解决方案1】:

    不确定是否有更简单的方法来获取具有别名的列的名称,但一种方法是通过 XML。此查询将在内部查询中每列返回一行:

    select T1.res.value('local-name(.)', 'varchar(50)')
    from (select cast(
    (
        select count(*) as Amount from test
        for xml raw) as xml
    )) q(res)
    CROSS APPLY q.res.nodes('/row/@*') as T1(res)
    

    【讨论】:

      【解决方案2】:

      在 SQL Server 2012 中,您有一个存储过程可以完全用于此目的。

      sp_describe_first_result_set (Transact-SQL)

      SQL Fiddle

      MS SQL Server 2012 架构设置

      create table test(id int);
      

      查询 1

      exec sp_describe_first_result_set N'select count(*) as Amount from test'
      

      Results

      | IS_HIDDEN | COLUMN_ORDINAL |   NAME | IS_NULLABLE | SYSTEM_TYPE_ID | SYSTEM_TYPE_NAME | MAX_LENGTH | PRECISION | SCALE | COLLATION_NAME | USER_TYPE_ID | USER_TYPE_DATABASE | USER_TYPE_SCHEMA | USER_TYPE_NAME | ASSEMBLY_QUALIFIED_TYPE_NAME | XML_COLLECTION_ID | XML_COLLECTION_DATABASE | XML_COLLECTION_SCHEMA | XML_COLLECTION_NAME | IS_XML_DOCUMENT | IS_CASE_SENSITIVE | IS_FIXED_LENGTH_CLR_TYPE | SOURCE_SERVER | SOURCE_DATABASE | SOURCE_SCHEMA | SOURCE_TABLE | SOURCE_COLUMN | IS_IDENTITY_COLUMN | IS_PART_OF_UNIQUE_KEY | IS_UPDATEABLE | IS_COMPUTED_COLUMN | IS_SPARSE_COLUMN_SET | ORDINAL_IN_ORDER_BY_LIST | ORDER_BY_IS_DESCENDING | ORDER_BY_LIST_LENGTH | TDS_TYPE_ID | TDS_LENGTH | TDS_COLLATION_ID | TDS_COLLATION_SORT_ID |
      |-----------|----------------|--------|-------------|----------------|------------------|------------|-----------|-------|----------------|--------------|--------------------|------------------|----------------|------------------------------|-------------------|-------------------------|-----------------------|---------------------|-----------------|-------------------|--------------------------|---------------|-----------------|---------------|--------------|---------------|--------------------|-----------------------|---------------|--------------------|----------------------|--------------------------|------------------------|----------------------|-------------|------------|------------------|-----------------------|
      |         0 |              1 | Amount |           1 |             56 |              int |          4 |        10 |     0 |         (null) |       (null) |             (null) |           (null) |         (null) |                       (null) |            (null) |                  (null) |                (null) |              (null) |               0 |                 0 |                        0 |        (null) |          (null) |        (null) |       (null) |        (null) |                  0 |                (null) |             0 |                  0 |                    0 |                   (null) |                 (null) |               (null) |          38 |          4 |           (null) |                (null) |
      

      【讨论】:

        【解决方案3】:

        也许你想要这样的东西? :-)

        SELECT AMOUNT
        FROM
        (
        SELECT COUNT(*) AS AMOUNT
        FROM TEST
        )X
        

        【讨论】:

          猜你喜欢
          • 2013-08-18
          • 2012-10-18
          • 2012-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-08
          相关资源
          最近更新 更多