нужна помощь в первичном и внешнем ключе - PullRequest
2 голосов
/ 07 февраля 2010

Мне нужна помощь в автоматическом заполнении значений первичного ключа в таблице внешнего ключа при вставке данных в таблицу внешнего ключа. Например: я создал таблицу:

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

Скажем, в этой таблице Patient есть 5 строк: Скажем, значение первой строки: 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')

При выборе таблицы PatientId Guardians с отображением значений NULL: мой запрос при вставке значений в Guardians Таблица PatientId должна заполняться автоматически, что будет из Patient Таблица ...

  1. Моя вторая проблема: Как создать столбец Identity как varchar. Например: предположим, что я хочу увеличить мою Guardians таблицу на 'GRD0001', 'GRD0002', 'GRD0003', как это ...

Спасибо, S.D

1 Ответ

1 голос
/ 07 февраля 2010

Ваш вопрос не очень понятен - что именно вы хотите сделать ??

Когда вы вставляете что-то в таблицу Guardians, вы хотите автоматически вставить ее и в таблицу Patients? Я не совсем понимаю. Можете ли вы сделать полный пример, может быть ??

Если вам нужно получить значение IDENTITY для вставки из таблицы Patient, сделайте следующее:

DECLARE @NewPatientID INT

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

SET @NewPatientID = SCOPE_IDENTITY()

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

Что касается вашего второго вопроса: оставьте GuardiansId IDENTITY как есть (только столбец INT может быть IDENTITY, и вы хотите оставить это - поверьте мне!) И добавьте вычисляемый столбец в вашу таблицу:

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

Поскольку это поле PERSISTED , вы даже можете индексировать его и использовать как обычное поле во всех отношениях.

Это должно сработать!

...