У меня есть две таблицы под названием VisitorMaster
и SupportVisitor
. В VisitorMaster
У меня есть столбец VisitorID1
, который является первичным ключом (но не столбцом идентификации). В SupportVisitor
У меня есть столбец VisitorID2
, который действует как внешний ключ для таблицы VisitorMaser
. Но мое требование: я хочу, чтобы последнее сформированное значение столбца VisitorID1
было вставлено в VisitorID2
из SupportVisitor
. Как достичь этого .. Пожалуйста, помогите ??Присвоение значения столбца первичного ключа для столбца внешнего ключа
ответ
После вставки записи в таблицу с IDENTITY-колонку можно получить эту цифровую идентичность на строки, выбрав идентификатор области действия:
INSERT INTO VisitorMaster (Name) VALUES ('Jane doe')
SELECT SCOPE_IDENTITY() -- Will retrieve ID for Jane Doe
Я думаю, ваш лучший выбор будет гарантировать, что вы заключаете ваш INSERT
в таблицу VisitorMaster
с транзакцией, и в рамках транзакции вы получите значение VisitorID
, используя данные, которые вы вставили для запроса, и, наконец, положив это на SupportVisitor
, прежде чем совершать или откатывать лот.
Вы можете использовать триггер для этого, но триггеры - это неприятные вещи, которые могут иметь всевозможные непреднамеренные последствия, поскольку они действуют более или менее невидимо, поэтому я избегаю их.
В конечном счете, хотя я бы спросил, почему у вас есть не-идентичный суррогатный ПК в одной колонке? Это очень плохой дизайн. Либо используйте натуральный ключ (комбинация имени, фамилии, времени или любого другого), или используйте автоматически увеличивающееся поле идентификации в качестве суррогатной ПК (после чего вы затем можете использовать SCOPE_IDENTITY
), потому что иначе ваш ключ довольно шаткий и не гарантируется быть уникальным. Как вы генерируете это значение? Он хранится в отдельной таблице (я знаю, что некоторые базы данных используют такую систему, особенно базы данных моделей EAV, и она не является хорошей системой в какой-либо форме или форме, и с ней не намного легче справиться, чем с любыми значениями)? Если у вас есть какое-либо влияние на этот дизайн, тогда вы должны его изменить, потому что это пахнет и, вероятно, вызовет у вас много, МНОГИЕ проблемы в будущем.
спасибо Стив. Фактически я создал процедуру хранения под названием «USPGETMAXID» и выполнил это в таблице «VisitorMaster», чтобы увеличить значение столбца «VisitorID1» на 1 для каждого пользователя, когда пользователь вводит что-то в таблицу. Так что я должен сделать кулон 'VisitorID1' и 'Identity Column', или я могу достичь этого через мою процедуру ... помогите мне? – Nitesh
Если у вас нет насущной необходимости избегать этого, я бы определенно сделал столбец столбец идентичности. Это означает, что вам не нужно иметь SP и, следовательно, не нужно его поддерживать. Как естественные, так и суррогатные ключи имеют свои места, но каждый из них должен использоваться, когда наиболее уместно и происходит то, что мы знаем из вашего вопроса. Я бы сказал, что поле идентификации - это то, что вы здесь, для минимальной стычки и максимального удобства использования. –
Спасибо, очень сильно. – Nitesh
- 1. Ошибка столбца для первичного ключа
- 2. Создание столбца внешнего ключа
- 3. Ввести значение столбца первичного ключа в столбец не первичного ключа
- 4. Запрос для обновления значений столбца первичного ключа
- 5. Назначение внешнего ключа для моего первичного ключа
- 6. Как сопоставить значения первичного ключа и внешнего ключа?
- 7. Отношение OneToOne для столбца не первичного ключа
- 8. SQL Alter Statement для столбца первичного ключа
- 9. Пользовательское имя столбца внешнего ключа
- 10. POJO для составного первичного ключа от внешнего ключа
- 11. Использование «rowversion» в качестве столбца первичного ключа
- 12. Почему создается два столбца для внешнего ключа?
- 13. Удаление данных внешнего ключа должно отображать ошибку для первичного ключа
- 14. Получения высокого первичного ключа для указанного значения столбца
- 15. SQL Pivot для столбца внешнего ключа
- 16. Условие для некоторого столбца внешнего ключа
- 17. Изменение столбца первичного ключа в SQL Server
- 18. Размер первичного/внешнего ключа MySQL?
- 19. Как добавить/обновить/автозаполнение столбца внешнего ключа со значениями из столбца ключа pirmary?
- 20. Два строковых столбца в качестве первичного ключа
- 21. Добавление первичного ключа с изменениями типа столбца
- 22. Получение значения с использованием только первичного ключа и внешнего ключа
- 23. Обновление первичного ключа путем обновления внешнего ключа
- 24. Получить ограничение первичного ключа и внешнего ключа
- 25. PHP Назначение первичного ключа и внешнего ключа
- 26. ошибка внешнего ключа и первичного ключа
- 27. mysql - глобальное отключенное обновление столбца первичного ключа
- 28. Как воссоздать первичный после столбца первичного ключа?
- 29. Поле первичного внешнего ключа Hibernate
- 30. Значения по умолчанию для столбца внешнего ключа - InnoDB
-1 Это не сработает: OP специально заявил, что 'VisitorID1' не является столбцом идентификации, и поэтому SCOPE_IDENTITY не вернет его значение, равно как и INSERT не увеличит его. Этот ответ бессмыслен и не связан с вопросом. –
Ах коснуться, плохое чтение с моей стороны. – Elken
Спасибо Elken..Мой столбец «VisitorID1» не является столбцом идентификации .. есть ли какой-либо выход для этого ... или я обязан сделать его столбцом идентификации. – Nitesh