2017-03-11 53 views
0

我正在嘗試實現「自定義自動增量值」。下面的代碼是我想在MS Sql Server中使用的Mysql Server。如何將其轉換爲MS SQL?SQL Server函數和過程

DROP FUNCTION IF EXISTS getNextCustomSeq; 

CREATE FUNCTION getNextCustomSeq 
(
    sSeqName VARCHAR(50), 
    sSeqGroup VARCHAR(10) 
) RETURNS VARCHAR(20) 
BEGIN 
    DECLARE nLast_val INT; 

    SET nLast_val = (SELECT seq_val 
         FROM _sequence 
         WHERE seq_name = sSeqName 
         AND seq_group = sSeqGroup); 

    IF nLast_val IS NULL THEN 
     SET nLast_val = 1; 
     INSERT INTO _sequence (seq_name,seq_group,seq_val) 
     VALUES (sSeqName,sSeqGroup,nLast_Val); 
    ELSE 
     SET nLast_val = nLast_val + 1; 
     UPDATE _sequence SET seq_val = nLast_val 
     WHERE seq_name = sSeqName AND seq_group = sSeqGroup; 
    END IF; 

    SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,'0'))); 
    RETURN @ret; 
END 
+0

看一看[序列](https://msdn.microsoft.com/en-us/library/ff878091.aspx)上MS-SQL。 – McNets

回答

0

的T-SQL當量將是:

IF OBJECT_ID (N'dbo.getNextCustomSeq', N'FN') IS NOT NULL 
    DROP FUNCTION dbo.getNextCustomSeq; 

CREATE FUNCTION getNextCustomSeq(@sSeqName VARCHAR(50), @sSeqGroup VARCHAR(10)) 
RETURNS VARCHAR(20) 
AS 
BEGIN 
    DECLARE @nLast_val INT; 
    SELECT @nLast_val = MAX(seq_val) 
    FROM _sequence 
    WHERE seq_name = sSeqName 
     AND seq_group = sSeqGroup; 

    IF @nLast_val IS NULL 
    BEGIN 
     SET @nLast_val = 1; 
     INSERT INTO _sequence(seq_name, seq_group, seq_val) 
     VALUES (@sSeqName, @sSeqGroup, @nLast_Val); 
    END 
    ELSE 
    BEGIN 
     SET @nLast_val = @nLast_val + 1; 
     UPDATE _sequence 
     SET seq_val = nLast_val 
     WHERE seq_name = @sSeqName 
      AND seq_group = @sSeqGroup; 
    END; 

    DECLARE @ret VARCHAR(20); 
    SELECT @ret = @sSeqGroup + '-' + right(replicate('0', 6) + @nLast_val, 6) 
    RETURN(@ret); 
END