由于外键,SQL查询无法正常工作

时间:2015-11-13 13:05:40

标签: asp.net sql-server

我有两张医院系统表格

患者

(PK) ID - int (auto increments)
Name -varchar
surname -varchar
DOB - varchar
Email- varchar
Phone -varchar
(FK)address_ID 

和 地址表

Address(ID)-int (auto increment)
Line1 - varchar
Line2 - varchar
city - varchar
state - varchar

每当我尝试注册新患者时,它都不会在患者表中包含地址ID。我有它的地址表和address_id链接到患者表的数据库图中的address_ID作为其外键,它一直给我一个错误说它的空。因此,如果它没有自动进入患者表,我该如何自动递增它以使其与地址表中的address_ID保持一致?

这是我用来插入表单中的值的代码。

     string query1 = "insert into patient(name,surname,dob,email,phone) values (@pname, @psurname, @pdob, @pemail, @pphone)";
    string query2 = "insert into patient_address(Line1,Line2,city,state) values (@pline1, @pline2, @pcity, @pstate)";

    SqlCommand cmd1 = new SqlCommand(query1, con);
    cmd1.Parameters.AddWithValue("@pname", pname.Text);
    cmd1.Parameters.AddWithValue("@psurname", psurname.Text);
    cmd1.Parameters.AddWithValue("@pdob", dob.SelectedValue);
    cmd1.Parameters.AddWithValue("@pemail", pemail.Text);
    cmd1.Parameters.AddWithValue("@pphone", pphone.Text);

    SqlCommand cmd2 = new SqlCommand(query2, con);

    cmd2.Parameters.AddWithValue("@pline1", pline1.Text);
    cmd2.Parameters.AddWithValue("@pline2", pline2.Text);
    cmd2.Parameters.AddWithValue("@pcity", pcity.Text);
    cmd2.Parameters.AddWithValue("@cstate", pstate.SelectedValue);

    con.Open();
    cmd2.ExecuteNonQuery();
    cmd1.ExecuteNonQuery();
    con.Close();

如果有人可以提供某种指导,那将会有所帮助!感谢。

1 个答案:

答案 0 :(得分:0)

address_ID是一个(FK)可以是Null或Not Null(你可以检查它是否允许接受null或不接受null(无法是否为空),所以检查(FK)是否接受为null <或者

在1:N关系中:

如果某些时候(FK)被接受为空,这意味着这里的一些患者没有地址(因此不需要)。

但如果(FK)不接受为空,那么所有患者都应该有一个地址,并且它不应该为空。

而且(PK)根本不应该为空。

因此,在您的情况下,我认为添加自定义constraints

的最简单方法

或向IsAdressExist表添加一个额外的列(patient

或者只是首先在address_table中添加一个添加行(例如,地址(ID)= - 1的空地址),然后为没有{{1的地址的患者设置默认值}}

或只设置(FK)address_ID =-1 Address(ID_FK)

如果要在地址表中添加新地址,并且需要使用相同的新地址作为患者表的FK,那么您需要(最简单的方法):

1-将新地址添加到地址表中。

2-从地址表中获取MAX Address_ID(PK)

3-使用max address_ID并将其作为FK插入患者表。

OR

您需要创建一个长查询,它将执行上面提到的相同的先前步骤。