Sql server SQL Server中关于DBCC CHECKIDENT的IF语句

Sql server SQL Server中关于DBCC CHECKIDENT的IF语句,sql-server,tsql,Sql Server,Tsql,我试图创建一个IF语句,或者甚至是一个case,但我似乎无法获得正确的语法 我有这个: DECLARE @var INT SELECT @var = MAX(LeadAddressid) FROM dbo.STG_LEAD_ADDRESS_BASE WHERE LeadAddressid BETWEEN 600000000 AND 800000000 SET @var = @var + 1 DBCC CHECKIDENT ('STG_LEAD_ADDRESS_BASE',RESEED,

我试图创建一个IF语句,或者甚至是一个case,但我似乎无法获得正确的语法

我有这个:

DECLARE @var INT

SELECT @var = MAX(LeadAddressid)
FROM dbo.STG_LEAD_ADDRESS_BASE
WHERE LeadAddressid BETWEEN 600000000 AND 800000000

SET @var = @var + 1 

DBCC CHECKIDENT ('STG_LEAD_ADDRESS_BASE',RESEED, @var);
我试图设置的条件是,如果表为空或没有返回任何行,我需要以下代码

 DBCC CHECKIDENT ('STG_LEAD_ADDRESS_BASE',RESEED, 600000000);
如果表中的值介于600000000和80000000之间

那么我想要以下几点:

DBCC CHECKIDENT ('STG_LEAD_ADDRESS_BASE', RESEED, @var);

有人可以建议如何在SQL Server中执行此操作吗?我从未在T-SQL中使用过IF语句-我猜这是必需的?

试试这个。希望能有帮助

IF EXISTS (
        SELECT TOP 1 *
        FROM dbo.STG_LEAD_ADDRESS_BASE
        WHERE LeadAddressid BETWEEN 600000000
                AND 800000000
        )
BEGIN
    DECLARE @var BIGINT


    SELECT @var = MAX(LeadAddressid)
    FROM dbo.STG_LEAD_ADDRESS_BASE
    WHERE LeadAddressid BETWEEN 600000000
            AND 800000000

    --SET @var = @var + 1

    DBCC CHECKIDENT (
            'STG_LEAD_ADDRESS_BASE',
            RESEED,
            @var
            );
END
ELSE
BEGIN
    DBCC CHECKIDENT (
            'STG_LEAD_ADDRESS_BASE',
            RESEED,
            600000000
            );
END
测试脚本 创建测试表

插入脚本


第一次运行会将表标识重新设定为600000000,第二次运行会将表标识重新设定为600000000,下面的插入将为60000001,但是,如果您设置变量,您会注意到序列将为60000002,而不是60000001。希望有帮助。

有未覆盖的情况,如果表中的数据不在600000000到80000000之间,会发生什么?这个数字正确吗?或者缺少零?600000000包含8个零,80000000包含7个零。不应该有,因为可能达到的总行数不应该接近生命周期的总行数,因为每周有2000行。不应该有一个缺失的条件,因为这不可能发生?很抱歉,它缺少一个零,我现在就纠正它。我正在为使用IF语句的逻辑而挣扎,因为Case无法识别dbcc check identYour welcome,请确保不要将变量集@var=@var+1增加1,因为这将导致序列跳转并导致间隔。好的,我原以为您必须获得下一个标识?它会自动拾取下一个吗?是的,没错。我添加了一个测试脚本,您可以使用它来查看它是如何工作的。现在添加它很乐意提供帮助
IF OBJECT_ID('Test_Table')IS NOT NULL
DROP TABLE Test_Table
GO

CREATE TABLE Test_Table (LeadAddressid INT IDENTITY(1, 1),SomeColumn VARCHAR(10))
GO
IF EXISTS (
        SELECT TOP 1 *
        FROM dbo.Test_Table
        WHERE LeadAddressid BETWEEN 600000000
                AND 800000000
        )
BEGIN
    DECLARE @var BIGINT


    SELECT @var = MAX(LeadAddressid)
    FROM dbo.Test_Table
    WHERE LeadAddressid BETWEEN 600000000
            AND 800000000

    SET @var = @var

    DBCC CHECKIDENT (
            'Test_Table',
            RESEED,
            @var
            );
END
ELSE
BEGIN
    DBCC CHECKIDENT (
            'Test_Table',
            RESEED,
            600000010
            );
END

INSERT INTO Test_Table
SELECT 'a'

SELECT * FROM Test_Table