2

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

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

假设此表中有 5 行Patient:假设第一行值为: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')

在选择显示值的监护人表 PatientIdNULL时:我的查询是在Guardians表中插入值时PatientId应该自动填充,这将来自Patient表...

  1. 我的第二个问题是:如何将 Identity 列创建为varchar. 例如:假设我想用'这样的方式增加我的Guardians表......GRD0001', 'GRD0002', 'GRD0003'

谢谢,标清

4

1 回答 1

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保持原样(只有一个 INT 列可以是一个 IDENTITY 并且你想保留它 - 相信我!)并在你的表中添加一个计算列:

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

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

这应该够了吧!

于 2010-02-07T08:24:41.173 回答