如何在引用表中插入外键?
Posted
技术标签:
【中文标题】如何在引用表中插入外键?【英文标题】:How to insert the foreign key in the Referance table? 【发布时间】:2020-09-13 05:46:00 【问题描述】:当我填写网络服务数据时,我想插入外键??
首先我创建一个 2 表
tblpersonal:
studid int (primary key identity increment)
fname varchar(50)
mname varchar(50)
lname varchar(50)
tbl联系人
contactid int (primary key identity increment)
emailid varchar(50)
password varchar(50)
contactno varchar(50)
hobby varchar(50)
address varchar(50)
countrycodenum varchar(50)
studid (foreign key tblpersonal)
问题是当填充网络服务然后不插入有问题的外键见下图
WebService1.asmx.cs
namespace WebServiceDemo
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString);
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string InsertData(string fname, string mname, string lname, string emailid, string password, string contactno, string hobby, string address, string countrycodenum)
cn.Open();
var dataObject = new fname , mname , lname , emailid , password , contactno , hobby , address , countrycodenum ;
string data = JsonConvert.SerializeObject(dataObject);
SqlCommand cmd = new SqlCommand("insertsp_singlesp", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@fname", fname);
cmd.Parameters.AddWithValue("@mname", mname);
cmd.Parameters.AddWithValue("@lname", lname);
cmd.Parameters.AddWithValue("@emailid", emailid);
cmd.Parameters.AddWithValue("@password", password);
cmd.Parameters.AddWithValue("@contactno", contactno);
cmd.Parameters.AddWithValue("@hobby", hobby);
cmd.Parameters.AddWithValue("@address", address);
cmd.Parameters.AddWithValue("@countrycodenum", countrycodenum);
int i = cmd.ExecuteNonQuery();
if (i > 0)
Console.WriteLine("Insert Successfully");
else
Console.WriteLine("Not Insert Successfully");
cn.Close();
return data;
存储过程:insertsp_singlesp
ALTER PROCEDURE [dbo].[insertsp_singlesp]
@fname varchar(50),
@mname varchar(50),
@lname varchar(50),
@emailid varchar(50),
@password varchar(50),
@contactno varchar(50),
@hobby varchar(50),
@address varchar(50),
@countrycodenum varchar(50)
AS
BEGIN
insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
insert into tblcontact(emailid, password,contactno,hobby,address,countrycodenum)values(@emailid,@password,@contactno,@hobby,@address,@countrycodenum);
END
下图是在另一个表中给出外键:
请帮忙?
【问题讨论】:
您应该正确解释您的问题。请尝试编辑说明。 问题很简单 tblpersonal(studid-1011) insert in another table tblcontact(studid是外键-这里我要插入1011) @Nish 你有什么不明白的告诉我? 【参考方案1】:您可以更改 StoredProcedure 以捕获插入当前连接的最后一个 IDENTITY 值,然后使用此值设置您的 FK 值
ALTER PROCEDURE [dbo].[insertsp_singlesp]
@fname varchar(50),
@mname varchar(50),
@lname varchar(50),
@emailid varchar(50),
@password varchar(50),
@contactno varchar(50),
@hobby varchar(50),
@address varchar(50),
@countrycodenum varchar(50)
AS
BEGIN
insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
declare @studid int
SELECT @studid = SCOPE_IDENTITY();
insert into tblcontact(
emailid, password,contactno,hobby,
address,countrycodenum,studid)
values(
@emailid,@password,@contactno,@hobby,
@address,@countrycodenum,@studid);
END
【讨论】:
很高兴能提供帮助,并且查看您的代码,我还希望建议使用 AddWithValue 删除参数的创建。使用 Sql Server 很危险且性能不佳【参考方案2】:当您插入第二个表时,您根本没有提供第一个表的 PK。没有任何“魔法”可以让 SQL 系统说“是的——他的意思是”。
你没有说你使用的是什么系统,但它看起来像 SQL Server,所以我会继续使用它。您需要使用 SCOPE_IDENTITY() 函数来获取第一次插入后生成的最后一个身份,然后在第二次中使用它:
BEGIN
declare @ssi int;
insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
-- get the identity just created
select @ssi = scope_identity();
-- use it in the insert
insert into tblcontact (emailid, password, contactno,
hobby, address, countrycodenum, studid)
values (@emailid, @password, @contactno,
@hobby, @address, @countrycodenum, @ssi);
END
【讨论】:
以上是关于如何在引用表中插入外键?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 rest api 在休眠状态下插入表中,并且在该表 2 列上是另一个表的外键?