SQL Server数据库特殊查询

时间:2018-06-16 12:36:42

标签: c# sql sql-server

假设我在SQL Server数据库中有一个包含三列(SerialNoUserNamePassword)的表。现在,我可以使用SQL命令select来读取任何数据。

但有没有办法计算数据库表的列号?在我的情况下,我想返回“密码”列的列号,即3。

终于成功了。发表完整的答案。感谢这个令人敬畏的社区的每个人。

4 个答案:

答案 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();
        }

    }
    }
}