SQL Server中的IF语句围绕DBCC CHECKIDENT

时间:2017-03-27 11:59:00

标签: sql-server tsql

我正在尝试创建一个IF语句,甚至可能是一个案例,但我似乎无法使语法正确。

我有这个:

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语句 - 我猜这是必需的吗?

1 个答案:

答案 0 :(得分:1)

试试这个。希望它有所帮助

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

测试脚本

创建测试表

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

首次运行将表格身份重新设置为600000000,第二次运行将重新设置为600000000,以下插入将为600000001,但是如果您要对变量进行处理,您会注意到序列将是600000002而不是600000001。希望它会有所帮助。