Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql If-else用于返回值的用例_Sql_Sql Server - Fatal编程技术网

Sql If-else用于返回值的用例

Sql If-else用于返回值的用例,sql,sql-server,Sql,Sql Server,我正在尝试使用CASE执行if-else语句。如果没有记录,则将其设置为0,然后设置为+1。否则,只需获取最后一条记录,然后+1。第一次尝试时,我使用了ISNULL(语句,0)。但它没有其他声明 然后,我看到了许多关于case语句的StackOverflow的其他示例,但我似乎不明白如何实现它 INSERT INTO TICKET_SALES ( TRXDATE, KIOSKID, BOOKINGREFERENCENUM, ) VALUES ( '2019-

我正在尝试使用
CASE
执行if-else语句。如果没有记录,则将其设置为
0
,然后设置为
+1
。否则,只需获取最后一条记录,然后
+1
。第一次尝试时,我使用了
ISNULL(语句,0)
。但它没有其他声明

然后,我看到了许多关于case语句的StackOverflow的其他示例,但我似乎不明白如何实现它

INSERT INTO TICKET_SALES (
    TRXDATE, 
    KIOSKID, 
    BOOKINGREFERENCENUM, 
)
VALUES (
    '2019-01-18 16:59:29',
    'KIOSK1',
    ((SELECT TOP 1 BOOKINGREFERENCENUM FROM TICKET_SALES ORDER BY BOOKINGREFERENCENUM DESC)+1),
);

只需创建具有
理想性(1,1)
的表即可:

标识列可用于生成键值。身份 列上的属性可保证以下内容:

  • 根据当前种子和增量生成每个新值

  • 特定事务的每个新值都不同于其他值 表上的并发事务

  • 列上的identity属性不能保证以下内容:

  • 值的唯一性-必须使用 主键或唯一约束或唯一索引


只需创建具有
理想性(1,1)
的表即可:

标识列可用于生成键值。身份 列上的属性可保证以下内容:

  • 根据当前种子和增量生成每个新值

  • 特定事务的每个新值都不同于其他值 表上的并发事务

  • 列上的identity属性不能保证以下内容:

  • 值的唯一性-必须使用 主键或唯一约束或唯一索引


如果需要使用表达式来提供值,可以更改
选择
,但只能提供一行
选择
(除非使用
联合所有


请注意使用这种类型的“技巧”来生成ID,正如其他人所指出的,这是一个非常糟糕的主意(检查Steppup的答案以了解如何更正)。

如果需要使用表达式来提供值,可以更改
选择的
值,尽管您只能提供一行
选择
(除非您使用
联合所有


请注意使用这种类型的“技巧”来生成ID,正如其他人所指出的,这是一个非常糟糕的想法(检查Steppup的答案以了解如何更正)。

IMO最简单的方法是声明变量以保存所需的值,以易于阅读的方式为其赋值,然后在
INSERT
语句中使用它

此外,无需在订购时使用
TOP 1
,只需使用
MAX
函数:)


注意:您正在重新发明轮子,SQL具有类似于
标识的功能,它适合于此类任务。

IMO最简单的方法是声明变量以保存所需的值,以易于阅读的方式为其赋值,然后在
INSERT
语句中使用它

此外,无需在订购时使用
TOP 1
,只需使用
MAX
函数:)


注意:您正在重新发明轮子,SQL具有类似于
IDENTITY
的功能,这对此类任务很有好处。

要从查询中插入值,请使用
insert。。选择
而不是
插入。。值
另外,不要使用
MAX+1
作为ID。这会保证在删除行时重复和无效关系。你可以得到一个新的行,引用与旧的删除行相关的记录。如果使用这样的解决方案,它很容易受到竞争条件的影响;这可能意味着两行具有相同的ID。就个人而言,正如@jarlh所建议的,我将使用
标识
;但是,to并不意味着您将拥有序列号。要从查询中插入值,请使用
insert。。选择
而不是
插入。。值
另外,不要使用
MAX+1
作为ID。这会保证在删除行时重复和无效关系。你可以得到一个新的行,引用与旧的删除行相关的记录。如果使用这样的解决方案,它很容易受到竞争条件的影响;这可能意味着两行具有相同的ID。就个人而言,正如@jarlh所建议的,我将使用
标识
;然而,to并不意味着你将拥有序列号。lol。我怎么会错过1+isnull()的组合呢。仅供参考,我不需要这些值来创建ID,因为有许多行为null。因此,我只想增加,如果有任何现有的记录与预订参考号的具体条件在中国php@KIRPALSINGH那就要注意比赛情况了。如果并行运行此代码多次,则很可能会多次生成相同的
BookingReferenceum
。您可以使用
IDENTITY
列或创建
SEQUENCE
来解决此问题,并检索其下一个值,前提是您认为有必要。如果其中任何一个对您有效,请务必接受作为答案。它将帮助其他人快速找到有效的解决方案@基尔帕辛格。我怎么会错过1+isnull()的组合呢。仅供参考,我不需要这些值来创建ID,因为有许多行为null。因此,我只想增加,如果有任何现有的记录与预订参考号的具体条件在中国php@KIRPALSINGH那就要注意比赛情况了。如果并行运行此代码多次,则很可能会多次生成相同的
BookingReferenceum
。您可以使用
IDENTITY
列或创建
SEQUENCE
来解决此问题,并检索其下一个值,前提是您认为有必要。如果其中任何一个对您有效,请务必接受作为答案。它将帮助其他人快速找到有效的解决方案@谢谢,但你不明白我的问题。我不想在这里创建id。反正有人
CREATE table TicketSales
(
       TrxDate DATETIME
    ,  KioskId INT
    , BookingReferenceNum int IDENTITY(1,1)
)
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)
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
);