ring buffer으로 사용되는 표에서 CYCLE
옵션을 포인터로 사용하는 sequence을 사용할 수 있습니다.
CREATE SEQUENCE BufferPtr
START WITH 1
MINVALUE 1
MAXVALUE 100000
CYCLE;
가 .. 100000을 다르게 테이블을 만들고 빈 항목을 허용하고, 그런 다음 100000 개 빈 기록 및 IDS 1 테이블을 채우기
CREATE TABLE dbo.TabOfEvents (
[Id] INT NOT NULL,
[cta] NCHAR (10) NULL,
[code] NVARCHAR (MAX) NULL,
[date] DATETIME2 (7) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
)
IDS
를 입력 할 수 있도록 :이 데이터베이스에서 시퀀스 객체를 생성 우리는 미리 레코드 수를 알아 내고 쿼리를 저장하기 위해이 작업을 수행합니다. 즉, 삽입 또는 업데이트를해야하는지 알기 위해 레코드 수를
SELECT COUNT (*) FROM TabOfEvents
으로 쿼리 할 필요가 없습니다. Sequence는 업데이트 할 레코드를 결정하기 위해 UPDATE 명령 자체에서 사용됩니다. 새로운 시퀀스 번호마다 생성되고 제한 10 만에 도달 한 후 순서 지금 1
-- This creates 100000 empty records with an Id. The code is quite tricky and I won't explain
-- the details here. If you prefer, create a stored procedure with a FOR-loop or do it in an
-- external application (e.g. C# Console app). Performance is not important, since we are
-- doing it only once.
;WITH e1(n) AS
(
SELECT 1 FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0)) t(n)
)
INSERT INTO dbo.TabOfEvents (Id)
SELECT ROW_NUMBER() OVER (ORDER BY n10.n) AS n
FROM
e1 n10
CROSS JOIN e1 n100
CROSS JOIN e1 n1000
CROSS JOIN e1 n10000
CROSS JOIN e1 n100000
에서 시작됩니다 테이블과 순서가 설정되어 있으며
UPDATE TabOfEvents
SET cta = 'test', code = 'xxx', [date] = SYSDATETIME()
FROM
TabOfEvents
INNER JOIN
(SELECT
NEXT VALUE FOR BufferPtr AS Ptr
FROM (VALUES (1)) t(n)
) a
ON TabOfEvents.Id = a.Ptr;
로 레코드를 업데이트 할 수 있습니다
4 개의 레코드 만 사용하여 여기에서 테스트를 볼 수 있습니다 (http://sqlfiddle.com/#!6/2679e/5/2). 을 클릭하십시오. SQL을 반복적으로 실행하면 이벤트가 주기적으로 어떻게 추가되는지 확인할 수 있습니다.
참고 : 첫 번째 시도는 UPDATE TabOfEvents SET cta = 'test', code = 'xxx', [date] = SYSDATETIME() WHERE Id = NEXT VALUE FOR BufferPtr
이지만 SQL Server는 WHERE 절의 시퀀스를 쿼리하지 않습니다. 내 UPDATE 문을 단순화 할 수 있습니까?
실제로 필요한 버퍼가 무엇인지, 내가 원하는 것을 완벽하게 삭제 자체를 관리 할 수 있지만 어떻게 구현할 수 있는지 이해하지 못했습니다, 그것은 SQL 쿼리입니까? 또는 내 신청서에? – lawir
버퍼의 크기는 항상 동일합니다. 따라서 삭제는 더 이상 필요하지 않습니다. CREATE SEQUENCE는 데이터베이스를 설정하는데 필요할 것입니다 (SQL-Server 구문을 사용했습니다). 'UPDATE'는 이벤트를 테이블에 입력해야하는 쿼리입니다. 항목을 순환 방식으로 대체합니다. –
필자는 insert into query를 사용하여 테이블에 이벤트를 입력합니다. 업데이트 쿼리는 필자가 필요로하지 않는 행을 정확하게 업데이트하고자 할 때 필요합니다. create sequence에 관해서는 아마도 데이터베이스와 프로그래밍 C#으로 새로운 것이기 때문에 가능할 수도 있습니다.하지만이 시퀀스를 어디에서 어떻게 생성하는지 모릅니다. 더 구체적으로 제발? – lawir