我想在SQL Server中查询列的名称。我知道可以从系统表中获取表格列,但不幸的是,这对我来说还不够。
示例:
我有一个包含ID
列和字符串列的表。该表的名称为test
,其中包含testID
和test
列。
此查询:
select column_name
from information_schema.columns
where table_name = 'teszt'
返回表格列的名称。因此它会返回testID
和Test
。
我想要的是当我使用这样的查询时:
select count(*) as Amount from test
我想要一个可以返回查询列名的查询。因此,在这种特定情况下,它返回字符串' Amount'。我不知道这是否可能。
答案 0 :(得分:2)
不确定是否有更简单的方法来获取带别名的列名称,但是这样做的一种方法是通过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)
答案 1 :(得分:1)
在SQL Server 2012中,您有一个可用于此目的的存储过程。
sp_describe_first_result_set (Transact-SQL)
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) |
答案 2 :(得分:0)
也许你想要这样的东西? : - )
SELECT AMOUNT
FROM
(
SELECT COUNT(*) AS AMOUNT
FROM TEST
)X