使用别名获取列名称

时间:2015-01-05 11:14:31

标签: c# sql sql-server-2008

我正在使用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。

2 个答案:

答案 0 :(得分:1)

                    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);
                    }

答案 1 :(得分:0)

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

  

SELECT * FROM OPENQUERY(LOCALSERVER,&#39; EXEC your_stored_procedure&#39;)WHERE 1 = 2

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

现在,您可以使用阅读器提取空结果集的表模式

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);
         }
 }