【问题标题】:Create SQL Server table programmatically以编程方式创建 SQL Server 表
【发布时间】:2023-10-03 07:34:01
【问题描述】:

我需要在 C# 中以编程方式创建一个 SQL Server 2008 表,以便从列列表生成表的列(每个列名是表中一行的名称)

我的问题是遍历列列表并创建记录表的命令字符串是什么:

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

我想用columnsName 中的列创建一个表。但是由于列表大小不是恒定的,我需要遍历列表来生成表格列。

【问题讨论】:

  • 0_o 我不知道行有名称的任何 RDBMS。在我知道的每个 RDBMS 中,列都有名称......
  • 欢迎来到 *。当您询问差异很大的内容时(例如对特定 SQL 语法的支持),您应该提供更具体的标记以及通用标记。在这种情况下,由于 DBMS 的 SQL 语法差异很大,因此了解您使用的数据库(MySQL、SQL Server 等)很重要。有些甚至不允许使用 SQL (DDML) 语句创建数据库。请编辑您的问题以添加您正在使用的数据库引擎的标签,因为很难提供一个涵盖所有这些引擎的答案。谢谢。 :)
  • 您可以从DataTable 中的列生成SQL 表。这有什么好处吗?
  • 我将问题更新得更准确。
  • @wingman55 如果您需要更多帮助或将答案标记为正确,请告诉我们。

标签: c# sql-server-2008-r2 sqlcommand


【解决方案1】:

您是否希望实现实体-属性-值模型之类的东西?

http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

【讨论】:

    【解决方案2】:

    简单的答案是

    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 将被替换为您从中获取数据的任何内容。从您的描述看来,您似乎是从查询中获取列值,因此您可能会使用 while 循环来遍历结果以构建查询,而不是使用 for 循环和数组。如果您需要使用此方法的示例,请告诉我,我今晚会做一个。

    如果您在创建表时遇到语法问题,可以尝试在 MS SQL Server Management Studio 中创建表(或示例表),然后右键单击表并选择 Script Table as\Create To\New Query编辑器窗口。这将显示用于构建查询的脚本。

    【讨论】: