2013-04-05 6 views
0

У меня есть две таблицы под названием VisitorMaster и SupportVisitor. В VisitorMaster У меня есть столбец VisitorID1, который является первичным ключом (но не столбцом идентификации). В SupportVisitor У меня есть столбец VisitorID2, который действует как внешний ключ для таблицы VisitorMaser. Но мое требование: я хочу, чтобы последнее сформированное значение столбца VisitorID1 было вставлено в VisitorID2 из SupportVisitor. Как достичь этого .. Пожалуйста, помогите ??Присвоение значения столбца первичного ключа для столбца внешнего ключа

ответ

0

После вставки записи в таблицу с IDENTITY-колонку можно получить эту цифровую идентичность на строки, выбрав идентификатор области действия:

INSERT INTO VisitorMaster (Name) VALUES ('Jane doe') 

SELECT SCOPE_IDENTITY() -- Will retrieve ID for Jane Doe 
+0

-1 Это не сработает: OP специально заявил, что 'VisitorID1' не является столбцом идентификации, и поэтому SCOPE_IDENTITY не вернет его значение, равно как и INSERT не увеличит его. Этот ответ бессмыслен и не связан с вопросом. –

+0

Ах коснуться, плохое чтение с моей стороны. – Elken

+0

Спасибо Elken..Мой столбец «VisitorID1» не является столбцом идентификации .. есть ли какой-либо выход для этого ... или я обязан сделать его столбцом идентификации. – Nitesh

1

Я думаю, ваш лучший выбор будет гарантировать, что вы заключаете ваш INSERT в таблицу VisitorMaster с транзакцией, и в рамках транзакции вы получите значение VisitorID, используя данные, которые вы вставили для запроса, и, наконец, положив это на SupportVisitor, прежде чем совершать или откатывать лот.

Вы можете использовать триггер для этого, но триггеры - это неприятные вещи, которые могут иметь всевозможные непреднамеренные последствия, поскольку они действуют более или менее невидимо, поэтому я избегаю их.

В конечном счете, хотя я бы спросил, почему у вас есть не-идентичный суррогатный ПК в одной колонке? Это очень плохой дизайн. Либо используйте натуральный ключ (комбинация имени, фамилии, времени или любого другого), или используйте автоматически увеличивающееся поле идентификации в качестве суррогатной ПК (после чего вы затем можете использовать SCOPE_IDENTITY), потому что иначе ваш ключ довольно шаткий и не гарантируется быть уникальным. Как вы генерируете это значение? Он хранится в отдельной таблице (я знаю, что некоторые базы данных используют такую ​​систему, особенно базы данных моделей EAV, и она не является хорошей системой в какой-либо форме или форме, и с ней не намного легче справиться, чем с любыми значениями)? Если у вас есть какое-либо влияние на этот дизайн, тогда вы должны его изменить, потому что это пахнет и, вероятно, вызовет у вас много, МНОГИЕ проблемы в будущем.

+0

спасибо Стив. Фактически я создал процедуру хранения под названием «USPGETMAXID» и выполнил это в таблице «VisitorMaster», чтобы увеличить значение столбца «VisitorID1» на 1 для каждого пользователя, когда пользователь вводит что-то в таблицу. Так что я должен сделать кулон 'VisitorID1' и 'Identity Column', или я могу достичь этого через мою процедуру ... помогите мне? – Nitesh

+0

Если у вас нет насущной необходимости избегать этого, я бы определенно сделал столбец столбец идентичности. Это означает, что вам не нужно иметь SP и, следовательно, не нужно его поддерживать. Как естественные, так и суррогатные ключи имеют свои места, но каждый из них должен использоваться, когда наиболее уместно и происходит то, что мы знаем из вашего вопроса. Я бы сказал, что поле идентификации - это то, что вы здесь, для минимальной стычки и максимального удобства использования. –

+0

Спасибо, очень сильно. – Nitesh

Смежные вопросы