Stack Holder Ответов: 2

Как удалить все данные конкретного логина?


Я хочу удалить все данные a имя пользователя из всей таблицы из базы данных.
На самом деле у меня есть имя пользователя используется во всех таблицах как ФК.
Теперь я хочу удалить конкретного пользователя из своей базы данных.

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

Удалить С. Имя пользователя, стр. Название,С. Father_Name,С. Напишите,стр. Добролюбов,С. Пол,С. Национальность,стр. Местожительства,стр. Проверьте,С. Мобильный,стр. Адрес, адрес электронной.SSC_OM,Е. SSC_TM,Е. SSC_EB,Эл.HSSC_OM,Эл.HSSC_TM,Эл.HSSC_EB, д. Choices_1,д. Choices_2,д. Choices_3
От регистрации с
Внутреннее соединение Pers_D П О П.Имя пользователя = С. Имя пользователя
Внутреннее соединение Edu_D е на эл.Имя пользователя = стр. Имя пользователя
Внутреннее соединение Dep_S д О Д.Логин = е.Имя пользователя
Где [d].Имя как '%Абузар%'

0x01AA

Одним из способов было бы изменить ограничения внешнего ключа, включив ON DELETE CASCADE

Stack Holder

Что?

Stack Holder

в sql server 2012!

0x01AA

Да, это также возможно в SQL Server 2012! :)

2 Ответов

Рейтинг:
2

OriginalGriff

0x01AA означало, что при установлении отношения внешнего ключа между столбцом имени пользователя таблицы регистрации и записями имени пользователя Pers_D, Edu_D и Dep_s вы можете добавить ограничение на каскад удаления: SQL Server: внешние ключи с каскадным удалением[^]
Что происходит тогда, когда вы удаляете строку из главной таблицы-Signup-система автоматически удалит все строки из зависимых таблиц для вас:

DELETE FROM Signup WHERE UserName = @UserName
Сделает это автоматически за вас.

И не используйте как с DELETE! (Или даже обновить-сохранить как для SELECT, где это возможно) это очень опасно.
Предположим, вы хотите удалить пользователя "старый" и говорите:
DELETE FROM Signup WHERE UserName LIKE '%old%'
Пользователь" старый " пойдет - но так же пойдут и "смелый"," Олдсмобиль"... "Держатель Стека".
Лайк опасен - будьте очень осторожны там, где вы его используете!

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


F-ES Sitecore

- это очень опасно."

Не так опасно, как каскадное удаление :)

OriginalGriff

Каскадные удаления опасны, да - но и вполовину не так плохи, как каскадные удаления с подобными! :смеяться:

Stack Holder

с
Удалить * из регистрации, Где UserName = @Abuzar

возникли ошибки
Msg 102, Уровень 15, Состояние 1, Строка 2
Неправильный синтаксис рядом с '*'.

OriginalGriff

Извините, ошиблись базой данных! Просто уберите"*".

Stack Holder

тогда ошибка есть:

Msg 547, Уровень 16, Состояние 0, Строка 1
Оператор DELETE конфликтовал с ссылочным ограничением "FK_Pers_D". Конфликт произошел в базе данных "Online_Admission_Systemz", таблице" dbo.Pers_D", столбце "UserName".

Stack Holder

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

OriginalGriff

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

Stack Holder

Регистрация-это главная таблица (означает, что имя пользователя - это PK), а во всех других таблицах имя пользователя-FK.

OriginalGriff

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

Stack Holder

нераскрыто, но спасибо за ваши усилия.

kaushik ahir

это не select query, это Delete query, поэтому, пожалуйста, следуйте synatax: delete from table name where unm=@unm

Рейтинг:
0

kaushik ahir

удалить из регистрации, где UserName=@UserName