需要帮助主键和外键

时间:2010-02-07 07:10:49

标签: sql sql-server foreign-keys primary-key foreign-key-relationship

在外键表中插入数据时,我需要帮助自动填充外键表中的主键值。例如:我创建了表:

create table Patient
(
PatientId int IDENTITY(1,1) primary key,
FirstName varchar(50),
SurName varchar(50),
Gender char(20),
)

这个Patient表中有5行: Say First Row值是:1, Priya, Kumari, Female

我创建了Guardians表:

create table Guardians
(
GuardiansId int identity(1,1) primary key,
PatientId int foreign key references Patient(PatientId),
FirstName varchar(50),
SurName varchar(50),
Gender char(20),
RelationToPatient varchar(50),
)

在此表中,插入操作如下:

insert into Guardians(FirstName, SurName, Gender,RelationToPatient)values('Sumit','Kumar','Male','Wife')

选择显示NULL值的Guardians表PatientId时:我的查询是在Guardians PatientId中插入值时应该自动填充来自Patient表...

  1. 我的第二个问题是:如何将标识列创建为varchar。例如:假设我想使用Guardians这样的GRD0001', 'GRD0002', 'GRD0003'表增加...
  2. 谢谢, S.D

1 个答案:

答案 0 :(得分:1)

你的问题不是很明确 - 你究竟想做什么?

当您在Guardians表中插入内容时,您是否希望自动将其插入Patients表中?我不太关注。你能做一个完整的例子,也许??

如果您需要从Patient表中捕获插入IDENTITY值,请执行以下操作:

DECLARE @NewPatientID INT

INSERT INTO dbo.Patient(fields) VALUES(.......)

SET @NewPatientID = SCOPE_IDENTITY()

INSERT INTO dbo.Guardians(PatientId, ......) VALUES(@NewPatientID, ......)

关于你的第二个问题:保持GuardiansId IDENTITY原样(只有一个INT列可以是一个IDENTITY,你想保留它 - 相信我!)并在你的表中添加一个计算列: / p>

ALTER TABLE dbo.Guardians
  ADD GuardianIDWithPrefix AS 
    'GDR' + RIGHT('0000' + CAST(GuardiansId AS VARCHAR(4)), 4) PERSISTED

由于它是 PERSISTED 字段,您甚至可以对其进行索引,并在各个方面像普通字段一样使用它。

这应该可以做到!

相关问题