Subit Timalsina Ответов: 3

У меня возникли проблемы с вставкой значений в несколько таблиц


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

Пользователь:
функция user_id(ПК)
имя
адрес
contact_no
электронная почта
дата рождения

привилегии пользователей:
user_id(pk, fk to user table)
тип пользователя
пароль
recover_ans

Я написал хранимую процедуру но меня смутило будет ли это работать эффективно

Что я уже пробовал:

create procedure Register_User
@user_id varchar(10),
@name varchar(40),
@address varchar(40),
@contact_no varchar(15),
@email varchar(40),
@date_of_birth date,
@user_type varchar(20),
@password varchar(40),
@recover_ans varchar(40)
as begin
insert into [ClothStockManagement].[dbo].[user] values(@user_id,@name,@address,@contact_no,@email,@date_of_birth)
insert into user_privellage values(SCOPE_IDENTITY(), @user_type,@password,@recover_ans)
end

3 Ответов

Рейтинг:
2

Subit Timalsina

Спасибо я все уладил :)


Рейтинг:
19

Wendelius

Почему бы ему не работать эффективно? Если логика такова, что при регистрации нового пользователя вставляются обе таблицы, то, конечно, лучше сделать это с помощью одного вызова со стороны клиента, а не двух отдельных вставок от клиента или двух отдельных вызовов процедур.

Но имейте в виду, как я уже писал ранее, убедитесь, что вы не храните пароли в виде обычного текста.


Subit Timalsina

Да братан я сменю пароль
а в моем случае у меня есть две таблицы с данными пользователя
поэтому во время регистрации пользователя мне приходится вставлять значения в две таблицы из одной и той же формы вот почему

Wendelius

В этом случае я считаю, что очень эффективно иметь одну процедуру для обработки обеих вставок.

Subit Timalsina

да, это то, что я пробовал, поэтому я спрашивал, все ли в порядке? то, как я это сделал.

Wendelius

Насколько я вижу, никаких проблем быть не должно. Если процедура успешно создана, она должна работать должным образом.

Добавление точек с запятой в конце операторов, возможно, повысит читабельность. Иначе говоря

как начать
вставить в [ClothStockManagement].[dbo].[пользователь] значения(@функция user_id,@имя,@адрес@contact_no, электронная почта,@date_of_birth);

вставить в user_privellage значения(SCOPE_IDENTITY(), @user_type,@password,@recover_ans) ,

конец

Рейтинг:
0

CHill60

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

Здесь идет дискуссия о том, почему и как этого достичь...Управление транзакциями в хранимых процедурах SQL Server - 4GuysFromRolla.com[^]


Wendelius

Не уверен, что это хорошая идея. С SQL Server это всегда было бы хорошим предложением, но транзакции работают по-другому в MySQL. Из-за этого транзакция должна начинаться и заканчиваться только в одной точке.

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

В любом случае, обработка транзакций-это всегда действительный пункт, так что мои 5 за это.