如何从表中获取自动增量列名称

时间:2014-09-16 10:41:36

标签: c# sql sql-server

我尝试了这个查询:

 SELECT 
    IDENT_SEED('{0}'), IDENT_INCR ('{0}'), IDENT_CURRENT('{0}') AS Identity_Seed 
 FROM 
    information_schema.COLUMNS 
 WHERE 
    table_name = '{0}' AND column_name = '{1}'

name[i]是表名,dt.Columns[j].ColumnName是列名,但它适用于每一列,而不仅仅是特定的一个

也许有人知道我在该查询中的表现:

SELECT 
   IDENT_SEED('{0}'), IDENT_INCR ('{0}'), IDENT_CURRENT('{0}') AS Identity_Seed ", 
   name[i]

添加到列名称???

我只需要获取列名或添加列名所在的表达式(只获取一个选项)

1 个答案:

答案 0 :(得分:1)

怎么样

SELECT
    OBJECT_SCHEMA_NAME(object_id) + '.' + OBJECT_NAME(object_id),
    name
FROM 
    sys.identity_columns

这将输出该表的所有表格(以schema.table格式)和标识列(如果有)。

更新:好的,所以你显然想要为一张桌子做这件事 - 好的,然后使用这个代码:

string sqlStmt = "SELECT name FROM sys.identity_columns " +
                 "WHERE object_id = OBJECT_ID(@TableName)";

using (SqlConnection conn = new SqlConnection(your-connection-string-here))
using (SqlCommand cmd = new SqlCommand (sqlStmt, conn))
{
     // add table name as parameter
     cmd.Parameters.Add("@TableName", SqlDbType.VarChar, 100).Value = name[i];

     // open, execute, close
     conn.Open();

     object result = cmd.ExecuteScalar();
     conn.Close();

     // if result is NULL --> no identity column
     if (result != null) 
     {
          string identityColumn = result.ToString();
     }
}

这将返回名称为IDENTITY的表的name[i]列的名称 - 如果该表没有NULL列,则会返回IDENTITY ....