我创建与下面的代码的SQL Server序列序列。但它将错误显示为未知的对象类型。请给一个解决方案如何创建SQL Server 2008中
这里是我的代码:
create sequence seqval start with 100 increment by 1 minvalue 0 maxvalue 0 no cycle
no cache;
在此先感谢
我创建与下面的代码的SQL Server序列序列。但它将错误显示为未知的对象类型。请给一个解决方案如何创建SQL Server 2008中
这里是我的代码:
create sequence seqval start with 100 increment by 1 minvalue 0 maxvalue 0 no cycle
no cache;
在此先感谢
你确定你正在运行的2012?我没有遇到任何问题:
CREATE SEQUENCE seqval
START WITH 100
INCREMENT BY 1
minvalue 100 maxvalue 10000 NO CYCLE
您的0,0值为我生成了一个语法错误,但是一个清晰而简单的错误。
The minimum value for sequence object 'seqval' must be less than its maximum value.
没有我使用2008 ITA不工作 – punitha 2013-03-23 08:14:38
创建一个Numbers
表;这里有关于这个问题的SO问题。我们称之为dbo.Number
。
有一个标识列的表。将种子和步骤,无论是适当的:
create table dbo.SequenceGenerator(ID int identity(1, 1), dummy int);
然后插入从数表中的值,并捕获新生成的标识值:
declare @HowMany int = 3; -- This determines how large a sequence you receive
-- at each itteration
declare @NewSequenceValue table (ID int);
insert dbo.SequenceGenerator(dummy)
output INSERTED.ID
into @NewSequenceValue
select Number from dbo.Numbers
where Number <= @HowMany;
select * from @NewSequenceValue;
一定要DELETE .. dbo.SequenceGenerator
不时,否则它会变大,没有额外的价值。不要TRUNCATE
它 - 这会将IDENTITY
列重置为其初始声明的种子值。
是的,我同意。我发现这个博客条目http://blogs.msdn.com/b/askjay/archive/2012/10/08/sequence-objects-in-sql-2012-and-sql-2008。aspx,它很好地描述了相同的解决方案,并将其与SQL 2012的功能进行了比较。 – NotSoOldNick 2015-07-27 05:18:48
WITH N0 as (SELECT 1 as n UNION ALL SELECT 1)
,N1 as (SELECT 1 as n FROM N0 t1, N0 t2)
,N2 as (SELECT 1 as n FROM N1 t1, N1 t2)
,N3 as (SELECT 1 as n FROM N2 t1, N2 t2)
,nums as (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as num FROM N3)
SELECT * FROM nums
SQL Server 2008中不能创建序列,序列对象通过当前版本适用于SQL Server 2012。
https://msdn.microsoft.com/es-es/library/ff878091(v=sql.120).aspx
您可以在表中使用的身份,而不是,例如:
CREATE TABLE Person(
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Name varchar(255) NOT NULL
);
身份的初始值为1,它会以1为每条新纪录递增。
虽然有效的答案有点不符合上下文。操作系统没有声明该序列是用于表格密钥的,它可能是必需的,并且通常用于除密钥以外的用例。 – 2016-03-03 15:28:24
您可以这样做。
--Create a dummy TABLE to generate a SEQUENCE. No actual records will be stored.
CREATE TABLE SequenceTABLE
(
ID BIGINT IDENTITY
);
GO
--This procedure is for convenience in retrieving a sequence.
CREATE PROCEDURE dbo.GetSEQUENCE (@value BIGINT OUTPUT)
AS
--Act like we are INSERTing a row to increment the IDENTITY
BEGIN TRANSACTION;
INSERT SequenceTABLE WITH (TABLOCKX) DEFAULT VALUES;
ROLLBACK TRANSACTION;
--Return the latest IDENTITY value.
SELECT @value = SCOPE_IDENTITY();
GO
--Example execution
DECLARE @value BIGINT;
EXECUTE dbo.GetSEQUENCE @value OUTPUT;
SELECT @value AS [@value];
GO
如果在TRANSACTION中使用它,则需要更改过程以删除TRANSACTION并删除您插入的行,或者需要根据需要使用Job定期清理表。 – Graeme 2016-02-11 22:05:26
AFAIK有在SQL Server没有'SEQUENCE'语法2008年。它仅适用于'2012' – praveen 2013-03-23 08:20:42
然后ü可以PLZ让我知道如何创建自动生成SQL2008关键??? – punitha 2013-03-23 08:48:36
序列是SQL Server ** 2012 **中的新增功能,并且在早期版本中不可用。使用'CREATE TABLE YourTable(ID INT IDENTITY)' - SQL Server 2008中的机制是'IDENTITY'。 [阅读'MSDN上的SQL Server联机丛书IDENTITY'(http://msdn.microsoft.com/en-us/library/ms186775%28v=sql.100%29.aspx)的SQL Server – 2013-03-23 10:02:25