2011-09-27 3 views
0

У меня есть база данных DB с населением таблицы, но без Первичного ключа. Это означает, что он может иметь дублирование данных. Например: у меня есть 5 семейств (f1, f2, f3, f4, f5) с разными членами внутри (и члены могут иметь одно и то же имя). Поэтому я могу иметь точно такой же тип записи более чем в 1 строке. Теперь я хочу редактировать только одного члена семьи, но он редактирует все дубликаты записей. Я хочу сделать это, просто хочу обновить базу данных один раз и только один раз. Другими словами, я хочу использовать команду UPDATE для выполнения только один раз. Как это сделать? Я использую Sql Server Express, VS2010, C# 4.0 (если эта информация имеет значение). Я уверен, что моя проблема может показаться глупой некоторым людям (возможно, многим). Но это всего лишь манекен моей проблемы. Любая помощь или предложение будут высоко оценены. СпасибоВыполнение команды Sql только один раз

+2

Если имена дублируются и у вас нет первичного ключа, как бы определить «одну» строку, которую вы хотите обновить? –

+0

hmmm, проверив разные имена столбцов, и независимо от того, сколько строк, с которыми оно столкнулось, должно совпадать, оно должно обновить только один и выйти. но по вашему запросу один upvote – Sandy

+0

Вам все равно придется отвечать на вопрос о *, * строке для обновления. –

ответ

2

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

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

Если вы действительно хотите продолжить работу без первичного ключа, необходимо использовать ключевое слово TOP, как показано здесь: How do I update n rows in a table?

Установите его

UPDATE TOP 1 .... 
+0

спасибо ... это сработало – Sandy

1

Добавить столбец идентификации, ID int с автоматическим приращением. Затем обновите, используя идентификаторы.

CREATE TABLE dbo.Family 
(
    Id int NOT NULL IDENTITY (1, 1), 
    FamilyName varchar(50) NULL 
) 

update dbo.Family set FamilyName = 'xxx' where Id = y 
+0

, безусловно, рассмотрит вопрос о добавлении столбца идентификации – Sandy

1

В случае, если Вы не можете добавить столбец идентификаторов по некоторым причинам:

UPDATE TOP (1) Families 
SET Whatever = 'Your Value', ... 
WHERE <Your where clause> 
+0

И как вы гарантируете, что это обновит правильную строку? –

+0

Определите «правильный». Если строки все одинаковые, идея состоит в том, чтобы изменить любой из них. Если строки не идентичны, не делайте этого так: используйте предложение WHERE, которое получает правильную строку. – Andrew

+1

Но обновление случайных записей намного проще, чем поиск правильной записи!Как я всегда говорю: «ТАК гораздо проще рассуждать дико, чем заниматься исследованиями и находить правильный ответ. – Jay

0

реальный ответ: Фикс структуры базы данных. Каждая запись должна иметь уникальный идентификатор. Добавьте поле автоинкремента или что-то еще.

Чтобы ответить на ваш вопрос, вы можете сказать «обновить верх (1) ...», чтобы обновить только одну запись. Но без какого-либо уникального идентификатора, как вы знаете, какая запись обновляется? Программа по существу обновит случайную запись. Который возвращает меня к пункту 1.

Редактировать: Упс, мой первоначальный ответ был для другого движка. Исправлено выше.

+0

Я обязательно рассмотрю мой проект базы данных и рассмотрю добавление столбца id. Спасибо за вашу помощь – Sandy

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