使用别名获取列名
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);
}
}
我正在使用 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);
}
}