Sie können es so machen.
erstes eine Sequenz erstellen, um ganzzahlige Sequenznummern zu erzeugen aus Ausgangs 1.
CREATE SEQUENCE dbo.MySeq AS INT
START WITH 1
INCREMENT BY 1;
dann eine gespeicherte Prozedur erstellen, die einen Sequenzcode in dem gewünschten Format erzeugt.
CREATE PROCEDURE dbo.up_GetNextSequence
(
@seq nchar(5) out
)
AS
DECLARE @i int = NEXT VALUE FOR dbo.MySeq;
IF @i > 685323
BEGIN
RAISERROR(N'Sequence is out of range.', 16, 0);
END
IF @i < 10000
BEGIN
SET @seq = N'A' + FORMAT(@i, 'D4');
END
ELSE
BEGIN
DECLARE @j int;
SET @j = @i - 9999;
DECLARE @k int;
SET @k = ((@j - 1) % 999) + 1;
DECLARE @l int;
SET @l = (@j - 1)/999;
DECLARE @m int;
SET @m = (@l % 26) + 65;
DECLARE @n int;
SET @n = (@l/26) + 65;
SET @seq = NCHAR(@n) + NCHAR(@m) + FORMAT(@k, 'D3');
END;
Dann testen Sie die gespeicherte Prozedur.
DECLARE @seq nchar(5);
EXEC up_GetNextSequence @seq output;
SELECT @seq AS '@seq'
es vier weitere Male an und wir bekommen zu "A0005".
den ersten Breakpoint Um zu testen, die Sequenz Objekt verändern, so dass es wieder 9999. Dann wieder den Testcode auszuführen.
ALTER SEQUENCE dbo.MySeq
RESTART WITH 9999;
Und so weiter ...
ALTER SEQUENCE dbo.MySeq
RESTART WITH 10998;
ALTER SEQUENCE dbo.MySeq
RESTART WITH 35973;
ALTER SEQUENCE dbo.MySeq
RESTART WITH 659349;
Um zu testen, was passiert, wenn das Ende des zulässigen Bereichs erreicht wird.
ALTER SEQUENCE dbo.MySeq
RESTART WITH 685323;
Ausführen der gespeicherten Prozedur noch einmal, und sie löst einen Fehler, sagen die Sequenz außerhalb des Bereichs liegt. Das ist Absicht.
ist es Ihre Hausarbeit, die wir tun müssen oder was? Was hast du bisher versucht? Posten Sie das – mohan111