您如何连接来自其他表或我的第 5 个表上的用户输入的数据?

Posted

技术标签:

【中文标题】您如何连接来自其他表或我的第 5 个表上的用户输入的数据?【英文标题】:how do you connect the data from other table or from the users input on my 5th table? 【发布时间】:2018-08-19 15:01:21 【问题描述】:

将来自其他表或用户输入的数据放在第 5 个表中

在其上插入数据的存储过程

我在我的 Windows 窗体中连接了它。

supplier

CREATE TABLE SUPPLIER
(
    SUPPLIERID int identity(001,1) PRIMARY KEY NOT NULL,
    SUPPLIERNAME varchar(50) NOT NULL,
    ADDRESS varchar(50) NOT NULL,   
    Contact# varchar(50) NOT NULL
)

products

CREATE TABLE PRODUCTS
(
    PRODUCTID int identity(301, 1) PRIMARY KEY NOT NULL,
    PNAME varchar(50) NOT NULL,
    PCOLOR varchar(50) 
         FOREIGN KEY REFERENCES PRODUCTCOLOR(PRODUCTCOLOR) NOT NULL,
    PPRICE INT NOT NULL
)

productcolor:

CREATE TABLE PRODUCTCOLOR
(   
    PRODUCTCOLOR varchar(50) PRIMARY KEY NOT NULL
)

customer:

CREATE TABLE CUSTOMER
(       
    CUSTOMERID int identity(601,1) PRIMARY KEY NOT NULL,    
    FIRSTNAME varchar(50) NOT NULL,     
    LASTNAME varchar(50) NOT NULL,                      
    EMAIL varchar(50) NOT NULL ,        
    ADDRESS varchar(50) NOT NULL,       
    TELEPHONE varchar(50) NOT NULL,
    username varchar(50),
    password varchar (50)
)

我想把它们放在第 5 个表中并用它创建一个存储过程

orders:

CREATE TABLE ORDERS
(
    Cusid int NOT NULL foreign key references CUSTOMER(CUSTOMERID),
    Proid int NOT NULL foreign key references PRODUCTS(PRODUCTID),
    Supp int NOT NULL foreign key references SUPPLIER(SUPPLIERID),
    FNAME VARCHAR(50),
    LNAME VARCHAR(50),
    PRONAME VARCHAR(50),
    SUPNAME VARCHAR(50),
    PCOLOR  varchar(50)FOREIGN KEY REFERENCES PRODUCTCOLOR(PRODUCTCOLOR)NOT NULL,
    QUANTITY VARCHAR(50)primary key NOT NULL
)

存储过程:

CREATE PROCEDURE sp_order
    @FNAME varchar(50),         
    @LNAME varchar(50),                     
    @PRONAME varchar(50),       
    @SUPNAME varchar(50),       
    @PCOLOR varchar(50),
    @QUANTITY int
AS
    INSERT INTO ORDERS 
    VALUES (@FNAME, @LNAME, @PRONAME, @SUPNAME, @PCOLOR, @QUANTITY)

    RETURN 0

不知道我的第五张表是否正确,我的存储过程是否正确。

我尝试了很多东西,但它有点令人困惑

【问题讨论】:

没有人,但你可以知道你的表是否“正确”,除了你,但我可以说你不能插入它而不提供 NOT NULL 列的值。 我的存储过程出现了这个错误,所以我知道有些不对劲Column name or number of supplied values does not match table definition.@Crowcoder 在您想要插入时,您还需要在插入语句中提供 CustId、ProdId 和 Supp。 附注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀! 【参考方案1】:

如果您不插入表的所有列,则 INSERT 语句必须列出特定列:

INSERT INTO ORDERS (FNAME, LNAME, PRONAME, SUPNAME, PCOLOR, QUANTITY)
VALUES(@FNAME,@LNAME,@PRONAME , @SUPNAME, @PCOLOR, @QUANTITY);

注意如何指定列名以及提供的值。

但是,您的表已定义 NOT NULL 列,因此您必须为这些列提供值。

您的程序应该看起来更像这样:

CREATE PROCEDURE sp_order
@Cusid int,
@Proid int,
@Supp int,
@FNAME varchar(50),         
@LNAME varchar(50),                     
@PRONAME varchar(50),       
@SUPNAME varchar(50),       
@PCOLOR varchar(50),
@QUANTITY int
AS

    INSERT INTO ORDERS (Cusid, Proid, Supp, FNAME, LNAME, PRONAME, SUPNAME, PCOLOR, QUANTITY)
    VALUES(@Cusid, @Proid, @Supp, @FNAME,@LNAME,@PRONAME , @SUPNAME, @PCOLOR, @QUANTITY);

RETURN 0;

现在您遇到了获取这些外键值的问题。根据您提供的信息,我无能为力。

顺便说一句你不应该用“sp_”来命名过程,因为这是一个特殊的前缀,会给你带来小的性能损失。

【讨论】:

如何获取其他表的值?除了表订单之外的所有表都已经有值,例如 fname 和 lname 我想使用插入表订单的过程从表客户获取值 谢谢你的 awsome 您必须从 UI 中获取它们,例如从组合框控件或列表框之类的。我无法具体说明,但它与您获取任何值的方式非常相似,除了通常在某种选择列表中给出外键数据。

以上是关于您如何连接来自其他表或我的第 5 个表上的用户输入的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在连接表上的两个外键之间强制实施数据库约束?

在 4 个表上的 sqlite 中完全外连接

聚合和连接 2 个表或子查询

2个表上的Oracle触发器:未找到任何数据

选择并取消链接 3 个表上的文件

如何优化这个 MySql 查询 - 连接 3 个表?