SQL 表未生成

Posted

技术标签:

【中文标题】SQL 表未生成【英文标题】:SQL table not generating 【发布时间】:2021-09-04 18:29:29 【问题描述】:

我正在尝试创建一个表,但架构似乎存在问题。请使用下面的代码,一切都在运行,直到外键。如果我注释掉 FOREIGN KEY,它会创建表,但使用外键会出现以下错误:

System.Data.SqlClient.SqlException: '无效的对象名称'Products'。

这是我的产品架构

public void CreateProductTable()

    try
    
        string tableName = "Products";
        string schema = "ProductID int IDENTITY (1,1) PRIMARY KEY, " +
                        "ProductName VARCHAR(50) NOT NULL , " +
                        "ProductType VARCHAR(50) NOT NULL , " +
                        "ProductNumber int NOT NULL , " +
                        "ProductCondition VARCHAR(50) NOT NULL , " +
                        "ProductActiveInactive TINYINT NOT NULL , " +
                        "OnLoan BIT NOT NULL " +
                        "FOREIGN KEY(BrandID) REFERENCES ProductBrands(BrandID)";
        Helper.CreateTable(tableName, schema);
    
    catch (Exception e)
    
        // Log errors
        Console.WriteLine(e.Message);
    

这是我的 BrandProducts 架构:

public void CreateProductBrandTable()

    try
    
        string tableName = "ProductBrands";
        string schema = "BrandID int IDENTITY (1,1) PRIMARY KEY, " +
                        "BrandName VARCHAR(50) NOT NULL";
        Helper.CreateTable(tableName, schema);
    
    catch (Exception e)
    
        // Log errors
        Console.WriteLine(e.Message);
    

Helper.CreateTable

public static void CreateTable(string tableName, string tableStructure)

    string sql = $"CREATE TABLE tableName (tableStructure)";
    using (var connection = GetConnection())
    
        try
        
            connection.Execute(sql);
        
        catch (Exception e)
        
            Console.WriteLine(e);
        
    

获取连接:

public static bool DoTablesExist()

    var connection = GetConnection();
    string sql = $"SELECT COUNT(*) FROM connection.Database.INFORMATION_SCHEMA.TABLES" +
                 $" WHERE TABLE_TYPE = 'BASE TABLE'";
    using (connection)
    
        int number = connection.QuerySingle<int>(sql);
        if (number > 0)
        
            return true;
        
        else
        
            return false;
        
    

【问题讨论】:

你能告诉我们 helper.Create Table 正在做什么...由于表创建是由其他库完成的,因此很难提出解决方案。 @AmitVerma 发布更新。谢谢你的回复:) OnLoad BIT NOT NULL 后面缺少逗号 还是一样。 可能是盲人,但我看不到产品中名为 BrandId 的任何列与 ProductBrands.BrandId 相等? 【参考方案1】:

您需要产品表中的BrandId 列才能将其作为 FK 引用。虽然能够简单地编写FOREIGN KEY(x) REFERENCES(y) 并且 sql server 将创建与 Y 相同类型和大小的列 X 会很可爱,但它不起作用 - 要创建的列列表需要其中的 X/X 需要先存在

在您尝试插入您的产品之前,请记住插入您的相关品牌记录;品牌必须首先存在,产品才能引用它

【讨论】:

以上是关于SQL 表未生成的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server CE 表未找到错误

SQL Server 表未显示表中列的值

Sql Server 数据透视表未对结果集进行分组

新表未显示在 SQL Server 2008 的出版物文章列表中

sql server 创建视图添加表时出现从其他数据库导入的表未显示出来

AnyDac aka FireDac 无法生成更新查询