2012-04-05 100 views
4

我需要以編程方式在C#中創建SQL Server 2008表,以便應該從列列生成表的列(每列名稱是表中的一行的名稱)以編程方式創建SQL Server表

我的問題是什麼是通過列的列表命令字符串循環,並創建記錄表的:

List<string> columnsName = ["col1","col2","col3"] 

我想創建一個表,在columnsName列。但由於列表大小不是常量,我需要遍歷列表以生成表列。

+3

0_o我不知道任何行有名字的RDBMS。在我知道的每個RDBMS中,列都有名字... – 2012-04-05 18:13:50

+3

歡迎來到StackOverflow。當你詢問廣泛變化的東西時(比如對特定SQL語法的支持),你應該提供一個更具體的標籤和通用標籤。在這種情況下,由於DBMS在其SQL語法中差異很大,因此瞭解您正在使用的數據庫(MySQL,SQL Server等)非常重要。有些甚至不允許使用SQL(DDML)語句創建數據庫。請編輯您的問題以添加您正在使用的數據庫引擎的標記,因爲提供涵蓋所有數據庫的答案相當困難。謝謝。 :) – 2012-04-05 18:18:10

+0

您可以從'DataTable'的列中生成一個SQL表。這有什麼好處? – MoonKnight 2012-04-05 18:18:30

回答

11

簡單的答案是

CREATE TABLE table_name 
(
    column_name1 data_type, 
    column_name2 data_type, 
    column_name3 data_type, 
    .... 
) 

w3Schools.com

在C#中使用string builder來連接查詢,然後執行查詢。

StringBuilder query = new StringBuilder(); 
query.Append("CREATE TABLE "); 
query.Append(tableName); 
query.Append(" ("); 

for (int i = 0; i < columnNames.Length; i++) 
{ 
    query.Append(columnNames[i]); 
    query.Append(" "); 
    query.Append(columnTypes[i]); 
    query.Append(", "); 
} 

if (columnNames.Length > 1) { query.Length -= 2; } //Remove trailing ", " 
query.Append(")"); 
SqlCommand sqlQuery = new SqlCommand(query.ToString(), sqlConn); 
SqlDataReader reader = sqlQuery.ExecuteReader(); 

注意:tableName,columnNames和columnTypes將替換爲您從中獲取數據的內容。從您的描述中,您聽起來像是從查詢中獲得列值,所以不是使用for循環和數組,而是使用while循環遍歷結果來構建查詢。讓我知道如果你需要一個使用這種方法的例子,我今晚會做一個。

如果您在創建表的語法時遇到問題,可以嘗試在MS SQL Server Management Studio中創建表(或示例表),然後右鍵單擊表並選擇腳本表作爲\ Create To \ New查詢編輯器窗口。這會向您顯示它將用於構建查詢的腳本。