Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
Меня интересует такой вапрос как в SQL Server 2008 сделать: Ситуаци следушая в таблицу каждую секунду записываются данные. Допустим если в таблице 100000 записей то как мне удалять первые 1000 записей. Дпустим чтоб как то автоматом было таблица заполнилась 100000 записей и автоматически 1000 удалилась с начала таблицы.
11 июл 11, 07:55    [10953636]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
NDZH,

delete top order by
11 июл 11, 10:17    [10954030]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Начинающий SQL 2008
NDZH,

delete top order by
Ссылку можно посмотреть, где это ORDER BY в DELETE?
11 июл 11, 10:40    [10954163]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
NDZH,

WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(ORDER BY...) FROM [Table])
DELETE CTE WHERE N<=1000;
11 июл 11, 10:43    [10954189]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
ммм. а как чтобы он автоматически работал просто запустить его и не останавливать?
11 июл 11, 10:46    [10954204]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
NDZH
ммм. а как чтобы он автоматически работал просто запустить его и не останавливать?
Получается, что у Вас два разных вопроса - (1) как удалить самые старые 1000 записей и (2) как это делать периодически?
Я попытался ответить на первый.
11 июл 11, 10:50    [10954236]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
iap,

Спасибо за ответ!
11 июл 11, 10:50    [10954247]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Мне не кажется, что данная постановка задачи может существовать в действительности... но тем не менее, чисто из академического интереса...


a- искомая таблица
a1- дополнительная таблица


на каждой из этих таблиц настроены триггеры

в общем примерно так:

--use test
--go

if OBJECT_ID ('a') is not null
	drop table a
go

if OBJECT_ID ('a_1') is not null
	drop table a_1
go

create table dbo.a (id int identity (1,1), dt datetime)	
go

create table dbo.a_1 (id int identity (1,1), dt datetime)
go

create trigger ad on a
after insert
as
	if (select inserted.id % 100  from inserted)=0 insert into a_1 values (GETDATE())
go	
		

create trigger ad1 on a_1
after insert 
as
	delete from dbo.a where id in (select top 10 id from dbo.a order by id)

go	

declare @i int =1
declare @imax int =200

while @i<=@imax
begin
	insert into dbo.a values (getdate())
	set	@i+=1
end	

go




select * from a_1 

select * from a
order by id
11 июл 11, 10:51    [10954250]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
Может я как то сам не правельно выразился. Дапустим у меня в табличке накопилось N-ое кол-во записей. И мне их просто надо подчистить или за архивировать как то. Дапустим рас в месяц или по накопившемуся кол-ву. Я просто новичек и книжку не скачать не где на русском по 2008 серверу. По этому и задаю может давольно таки простые вапросы.
11 июл 11, 11:20    [10954492]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
NDZH,

Тригер на таблицу, который на любой инсерт смотрит Count(*)<1000 и если не так то Delete top 1000...
Я бы так делал :)
11 июл 11, 11:26    [10954553]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
NDZH,

Job, запускающийся раз в месяц и удаляющий записи за предыдущий период
11 июл 11, 11:37    [10954645]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
vadim-tmn
Member

Откуда:
Сообщений: 52
delete from [1] where
(select COUNT(*) from [1] )>100000 and Id in (select top 1000 id from [1] order by id )
и это в джобе
11 июл 11, 12:11    [10954890]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
А как сделать этот джоб?
11 июл 11, 12:28    [10955002]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
А все доперло. Большое спасибо за ответ.
11 июл 11, 12:34    [10955049]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
mikola1982
Member

Откуда:
Сообщений: 587
так как сделать job в MS SQL Server 2008 Express
12 июл 11, 09:08    [10959594]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
mikola1982
так как сделать job в MS SQL Server 2008 Express
А здесь разьве шла речь об Express редакции?
Для Express-а только создавать задание в винде, в котором вызывать sqlcmd с передачей ей соответствующего скрипта.
12 июл 11, 09:11    [10959604]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
mikola1982
Member

Откуда:
Сообщений: 587
tpg,

спасибо. я так и думал
12 июл 11, 09:13    [10959615]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать?  [new]
NDZH
Member

Откуда:
Сообщений: 50
версия Standart у меня
12 июл 11, 15:16    [10962083]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить