我正在编写一个创建一些测试帐户的查询。我给我的存储过程一个INT作为起始编号 - 并且希望它只创建比之前的编号多1的帐户,因为每个帐号必须不同。我已从表中删除了几乎所有项目,但这是我正在尝试使用的内容:
CREATE TABLE #TempAccount (AccountNumber INT IDENTITY((@StartingAccountNumber), 1)
它给了我一个"错误的语法' @ StartingAccountNumber'。期待'('或SELECT"
一些在互联网上搜索给了我一个潜在的解决方案:
DECLARE @Statement VARCHAR(200)
SET @Statement = 'ALTER TABLE BA
ADD ES INT IDENTITY(' + CAST(@CurrentES AS VARCHAR) + ', 1);'
EXEC (@Statement)
然而 - 我被告知这不是这个项目的选择。有没有办法以类似于我原来意图的方式注入我的参数?
答案 0 :(得分:2)
您可以使用DBCC CHECKIDENT来执行此操作。首先创建表,然后使用此命令重新设置它。
CREATE TABLE #TempAccount (AccountNumber INT IDENTITY(1, 1))
Declare @StartingAccountNumber int
SET @StartingAccountNumber = 1000
DBCC CHECKIDENT
(
#TempAccount, RESEED, @StartingAccountNumber
)
您可以在此处阅读:http://www.techrepublic.com/blog/the-enterprise-cloud/how-do-i-reseed-a-sql-server-identity-column/
答案 1 :(得分:0)
听起来你想做的就是生成一系列单调数字,对吗?
使用包含大量连续整数值的实用程序表通常很有用,如下所示:
create table dbo.sequence ( id int not null primary key clustered )
go
set nocount on
go
declare @n int = -1000000
while ( @n < +1000000 )
begin
insert dbo.sequence values ( @n )
set @n = @n+1
end
go
set nocount on
go
你只需要做一次。一旦你有了这样的资源,事情就变得容易了:
CREATE TABLE #TempAccount ( AccountNumber int primary key clustered )
declare @starting_account_number int = 123456789
declare @count int = 10000
insert #TempAccount ( AccountNumber )
select @starting_account_number + offset.id
from dbo.sequence offset
where offset.id between 0 and @count-1