2013-08-22 27 views
4

我需要獲取PRIMARY KEY COLUMN NAME。 我有我的表的名稱在一個叫_lstview_item如何獲取表的PRIMARY KEY列名稱

變到現在我試圖讓這樣

string sql = "SELECT ColumnName = col.column_name" + 
       "FROM information_schema.table_constraints tc" + 
       "INNER JOIN information_schema.key_column_usage col" + 
       "ON col.Constraint_Name = tc.Constraint_Name" + 
         "AND col.Constraint_schema = tc.Constraint_schema" + 
       "WHERE tc.Constraint_Type = 'Primary Key'" + 
         "AND col.Table_name = " +_lstview_item+ ""; 

SqlConnection conn2 = new SqlConnection(cc.connectionString(cmb_dblist.Text)); 
SqlCommand cmd_server2 = new SqlCommand(sql); 
cmd_server2.CommandType = CommandType.Text; 
cmd_server2.Connection = conn2; 
conn2.Open(); 
string ColumnName = (string)cmd_server2.ExecuteScalar();     
conn2.Close(); 

列名沒有任何成功。 幫助?

+1

沒有任何成功嗎?任何異常或錯誤信息? –

+2

是我還是你的SQL語句中存在引號問題? –

+0

您指定的select語句正確返回PK列名。你面臨的具體問題是什麼? –

回答

6

這應該是您的查詢。你的表名缺少單引號。經過測試,工作正常。

string sql = "SELECT ColumnName = col.column_name 
    FROM information_schema.table_constraints tc 
    INNER JOIN information_schema.key_column_usage col 
     ON col.Constraint_Name = tc.Constraint_Name 
    AND col.Constraint_schema = tc.Constraint_schema 
    WHERE tc.Constraint_Type = 'Primary Key' AND col.Table_name = '" + _lstview_item + "'"; 
+0

PostgreSQL的版本:SELECT col.column_name FROM information_schema.table_constraints TC INNER JOIN information_schema.key_column_usage COL ON col.Constraint_Name = tc.Constraint_Name AND col.Constraint_schema = tc.Constraint_schema WHERE 低級(tc.Constraint_Type)= ('主鍵') AND col.Table_name ='mytable' – kikea

5

試試這個:

SELECT column_name 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 
AND table_name = 'TableName' 
+0

對於SqlServer也是如此,Eshsan的答案也可以針對PostgeSql進行調整。 – kikea