2012-04-05 189 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查询编辑器窗口。这会向您显示它将用于构建查询的脚本。