Увеличьте число на единицу с помощью оператора вставки SQL - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь вручную добавить записи в таблицу SQL Однако в этой таблице у нас есть столбец с именем Trackseq, который определяет способ просмотра данных в нашей системе CMS. Самый высокий TrackSeq появится первым. Я хочу вручную добавить новую строку, но я хочу, чтобы код проверял, основываясь на CLNTID, каков текущий trackSeq, и добавлял один к нему. Так что, если trackseq последней записи был 10, я хочу, чтобы новая запись заняла с trackseq 11. Вот мой код.

INSERT INTO tbl_CommTracking   (    CLNTID,
        TRACKSEQ,
        COMMDATE,
        COMMTIME,
    PRODCODE,
    COMMTYPE,
        EMPLOYEEID,
        COMMDETAILS,
        COMMSTATUS)
VALUES ('0000005566','999',GETDATE(),GETDATE(),'BS','Note','0000000786','Testing a manual import','A')

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Предполагая, что TRACKSEQ - числовой формат, вы можете прочитать фактическое наибольшее значение и сохранить его в переменной для использования в операторе вставки.

Обратите внимание, что в случае высокого параллелизма вы можете синхронизировать это выполнение, чтобы избежать дублирования значений @ts. Как было сказано @Tim Biegeleisen выше, столбец IDENTITY лучше всего подходит для задач такого рода, но имейте в виду, что он может оставить дыры в числовой последовательности в случае DELETE и неудачных INSERTS.

Например:

DECLARE @ts int; --or whatever numeric datatype it is
SELECT @ts = MAX(TRACKSEQ) + 1 FROM tbl_CommTracking   

INSERT INTO tbl_CommTracking   (
   --...
   TRACKSEQ
   --..
)
VALUES (
   --...
   @ts
   --...
)
0 голосов
/ 30 августа 2018

Вероятно, вы должны сделать TRACKSEQ столбцом автоматического приращения. Сначала отбросьте текущий столбец TRACKSEQ, затем добавьте его обратно:

ALTER TABLE tbl_CommTrackingDROP COLUMN TRACKSEQ;
ALTER TABLE tbl_CommTracking ADD TRACKSEQ INT IDENTITY;

Обратите внимание, что обычно вы также делаете TRACKSEQ первичным ключом таблицы. Если вы не хотите, это нормально, но тогда вам нужно убедиться, что вы можете сгенерировать свои собственные уникальные значения для столбца CLNTID.

Не совсем понятно, зачем вам это нужно; если вы просто хотите получить последние записи, используйте доступный столбец даты / времени, который был бы установлен во время вставки.

...