使用别名获取列名

Get column names using aliases

我正在使用 SQL Server 2008,我有一个如下所示的 SP:

SELECT id = t.nTableId
       ,t.nTableId AS id2
       ,t.nTableId
FROM   dbo.table AS t

我正在使用 .NET 应用程序,我需要其中的列名: id, id2 和 nTableId.

现在我正在使用 sp_helptext 将 SP 获取为字符串列表

var columns = new List<string>();
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        columns.Add(reader.GetString(0));
    }
}

在这个字符串列表中,我试图找到 SELECT 和 FROM,然后取这两者之间的行。我对这些行进行格式化,以便之后看起来正确。

然后问题是我觉得这个解决方案不够好。在这种情况下,你们有什么技巧可以让 SQL Server 2008 检索列名 id、id2 和 nTableId。

var columns = new List<string>();
DbCommand cmd = cnn.CreateCommand("SELECT * FROM Table1",  CommandType.Text);
DataTable Dt= cnn.GetDataTable(cmd);
foreach (System.Data.DataColumn col in dt.Columns)
{
    columns.Add(col.ColumnName);
}

这将是一个 2 步过程。 首先使用您的存储过程触发查询,以便不返回任何数据。 喜欢:

SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC your_stored_procedure') WHERE 1=2

由于条件永远不会成立,因此不会返回任何数据。我们需要使用OPENQUERY(主要用于链接服务器),因为我们要动态修改存储过程查询。

现在您可以使用 reader

提取空结果集的 table 架构
using(var reader = command.ExecuteReader())
{
      // This will return false - we don't care, we just want to make sure the schema table is there.
         reader.Read();
         var table = reader.GetSchemaTable();
         foreach (DataColumn column in table.Columns)
         {
             Console.WriteLine(column.ColumnName);
         }
 }