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 2008 的出版物文章列表中