假设我在SQL Server数据库中有一个包含三列(SerialNo
,UserName
,Password
)的表。现在,我可以使用SQL命令select来读取任何数据。
但有没有办法计算数据库表的列号?在我的情况下,我想返回“密码”列的列号,即3。
终于成功了。发表完整的答案。感谢这个令人敬畏的社区的每个人。
答案 0 :(得分:3)
我建议information_schema.columns
:
select *
from information_schema.columns c
where table_name = ? and table_schema = ?;
如果您想要'password'
的位置,请使用:
select ordinal_position
from information_schema.columns c
where table_name = ? and table_schema = ? and
column_name = 'password';
答案 1 :(得分:2)
嗯,当然 - 您可以检查sys.columns
目录视图,并获取包含此代码的任何列的SQL Server内部column_id
:
SELECT
ColumnName = c.name,
ColumnIndex = c.column_id
FROM
sys.columns c
WHERE
c.object_id = OBJECT_ID('dbo.--Your-Table-Name-Here--')
ORDER BY
c.column_id
但你想用这个做什么?
答案 2 :(得分:0)
您可以使用此查询
SELECT
sys.columns.column_id
FROM
sys.columns
WHERE
sys.columns.object_id = OBJECT_ID('dbo.**users**')
AND
sys.columns.name = '**password**'
答案 3 :(得分:0)
我终于设法测试了代码 Gordon Linoff 的建议。这是测试代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace TestingColumnIDPullling
{
class Program
{
static void Main(string[] args)
{
SqlConnection con;
SqlDataReader reader;
try
{
int id;
con = new SqlConnection(Properties.Settings.Default.Setting);
con.Open();
//Console.WriteLine("Enter User Id");
// id = Convert.ToInt32(Console.ReadLine());
string query = "select ordinal_position from information_schema.columns c where table_name = 'Test' and table_schema = 'dbo' and column_name = 'Password'";
reader = new SqlCommand(query, con).ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}", reader.GetInt32(0));
Console.ReadKey();
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
}
}