def strictly_increasing(L):
return all(x<y for x, y in zip(L, L[1:]))
def strictly_decreasing(L):
return all(x>y for x, y in zip(L, L[1:]))
def non_increasing(L):
return all(x>=y for x, y in zip(L, L[1:]))
def non_decreasing(L):
return all(x<=y for x, y in zip(L, L[1:]))
Самым простым способом IMO было бы объявить переменную для хранения желаемого значения, присвоить ей значение простым для чтения способом, а затем использовать ее в выражении INSERT
.
Более того, нет необходимости брать TOP 1
с упорядочением, просто используйте функцию MAX
:)
DECLARE @id INT;
SELECT @id = CASE COUNT(*) WHEN 0 THEN 0 ELSE MAX(BOOKINGREFERENCENUM) + 1 END
FROM MyTable;
INSERT INTO TICKET_SALES (
TRXDATE,
KIOSKID,
BOOKINGREFERENCENUM,
)
VALUES (
'2019-01-18 16:59:29',
'KIOSK1',
@id
);
ПРИМЕЧАНИЕ : вы заново изобретаете колесо, в SQL есть что-то вроде IDENTITY
, это хорошо для такого рода задач.
Если вам нужно использовать выражения для ввода значений, вы можете изменить VALUES
на SELECT
, хотя вы сможете указать только одну строку с SELECT
(если вы не используете UNION ALL
).
INSERT INTO TICKET_SALES (
TRXDATE,
KIOSKID,
BOOKINGREFERENCENUM
)
SELECT
'2019-01-18 16:59:29',
'KIOSK1',
1 + ISNULL(
(SELECT TOP 1 BOOKINGREFERENCENUM FROM TICKET_SALES ORDER BY BOOKINGREFERENCENUM DESC),
0)
Пожалуйста, остерегайтесь использования этого типа «уловок» для генерации идентификаторов, как указывали другие, это очень плохая идея (проверьте ответ StepUp, чтобы узнать, как исправить). [116 ]