Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Хранимая процедура, Update первой строки


Автор: Grif13 2.11.2005, 16:33
Нужно написать хранимую процедуру, которая будет делать Update, для первой строки таблицы . Помогите...

Автор: Satana 2.11.2005, 16:48
Grif13 А можно структурку таблицы и что конкретно будет обновляться?

Автор: Grif13 2.11.2005, 16:58
Таблица состоит из 3-х полей (допустим А, В, С).
Нужно в обнавит первую строку в этой таблице (все три значения поля)

Автор: boevik 2.11.2005, 17:37
А как/чем определяется первая строка?

Автор: Grif13 3.11.2005, 08:34
Первая строка определяется по полю с типом DateTime, по которому отсортированы записи в таблице.

Автор: boevik 3.11.2005, 08:40
Цитата(Grif13 @ 3.11.2005, 08:34)
Первая строка определяется по полю с типом DateTime, по которому отсортированы записи в таблице.

Тогда просто.
Допустим поле А это поле сортировки.
Код

CREATE PROCEDURE spUpdateABC
@A datetime,
@B int,
@C char(10)

AS

UPDATE Table1
SET a = @A,
       b = @B,
       c = @C
WHERE a = (SELECT MIN(a) from Table1)


Автор: Grif13 3.11.2005, 09:28
А можно вместо Table1 указать запрос, типа

UPDATE (select top 1 a,b,c from table1)
SET a = @A,
b = @B,
c = @C

незнаю почему, но у меня так не прет.

или после UPDATE обязательно таблицу надо указывать

Автор: boevik 3.11.2005, 09:36
Не понятно почему "так не прет".
Вместо запроса можно указать view.
T.e. создать view, как select top 1 a,b,c from table1.
И апдейтить её.
Но с TOPом это не пройдет

Автор: Grif13 3.11.2005, 10:29
А может есть другие варианты для замены первой строки в таблице

Автор: boevik 3.11.2005, 10:55
Grif13, вместо поиска обходных путей, лучше расскажи почему нормальный вариант апдейта не работает.

Автор: Grif13 3.11.2005, 11:17
Ну ладно начну с начала:

Таблица состоит их 4 полей, 3 из которых входят в ключ.
Записи в таблице отсартирование по ключевым полям.

Нужно заменить первую строку в отсартированной таблице

Автор: boevik 3.11.2005, 11:25
А почему апдейт не проходит?
Выдает какую либо ошибку?

Можно попробовать выполнить DELETE and INSERT как одна транзакция.

Автор: Grif13 3.11.2005, 13:21
boevik спасибо за помощь

Нашел я варианn, хоть он мне и не навится может кому нибудь пригодится

Код

UPDATE dbo.Tabel1 
SET     [a]     = NewValue1,
     [b]     = NewValue2,
     [c]     = GetDate(),
     [d]     = NewValue3
from (SELECT  Top 1 * FROM Tabel1) AS temp1
where Tabel1.a=temp1.a
and Tabel1.b=temp1.b
and Tabel1.c=temp1.c



Если есть варианты лучше, пишите - буду благодарен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)