Sql server SQL Server中关于DBCC CHECKIDENT的IF语句
我试图创建一个IF语句,或者甚至是一个case,但我似乎无法获得正确的语法 我有这个: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,
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