当外键关联两个表时执行插入操作?

时间:2014-04-11 05:26:39

标签: sql sql-server-2008-r2

我在sql server 2008 db diagram

中创建了两个表

如图

所示

我在产品表中添加了一些数据

insert into tblproduct values ("I PHONE");
insert into tblproduct values ("SAMSUNG");
insert into tblproduct values ("SONY");
...etc

现在我的问题是如何编写用于在tblOrder中插入数据的sql语句 这样Pid就会自动填入tblOrder。

3 个答案:

答案 0 :(得分:1)

好吧,回答你的问题sql数据是由sql语言操纵的。但是sql server只是一种保存结构化数据的方法。

因此,当您构建应用程序,并列出可订购的产品时,您就会知道产品的ID。然后你可以做类似的事情:

INSERT INTO tblOrder(OName, Pid)
VALUES ('name_choosen', [product_id_selected])

在您的情况下,对于SQL培训,您可以:

INSERT INTO tblOrder(OName, Pid)
SELECT 'name_of_order', Pid
FROM tblProduct
WHERE PName='IPhone'

或者

INSERT INTO tblOrder(OName, Pid)
SELECT 'name_of_order'
      , (SELECT Pid from tblProduct WHERE PName='IPhone')

INSERT INTO tblOrder(OName, Pid)
VALUES ('name_of_order'
      , (SELECT Pid from tblProduct WHERE PName='IPhone'))

答案 1 :(得分:0)

希望这有帮助

http://www.codeproject.com/Articles/620086/CASCADE-in-SQL-Server-with-example

快乐的编码。

尝试使用INSERT ON CASCADE。

答案 2 :(得分:0)

INSERT INTO tblOrder(OName, Pid)
SELECT 'nameOfOrder',Pid
FROM tblProduct
WHERE PName='IPhone'.

您需要从products表中提取PID,而不是直接在Orders表中插入PID。 这将确保产品表中存在订单表中的所有pid。

此外,您无法记住所有产品的Pid,但可以通过名称识别产品(Iphone,Samsung等),这样更方便。