我正在尝试创建一个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
语句 - 我猜这是必需的吗?
答案 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。希望它会有所帮助。