2013-03-23 77 views
3

我創建與下面的代碼的SQL Server序列序列。但它將錯誤顯示爲未知的對象類型。請給一個解決方案如何創建SQL Server 2008中

這裏是我的代碼:

create sequence seqval start with 100 increment by 1 minvalue 0 maxvalue 0 no cycle 
no cache; 

在此先感謝

+1

AFAIK有在SQL Server沒有'SEQUENCE'語法2008年。它僅適用於'2012' – praveen 2013-03-23 08:20:42

+0

然後ü可以PLZ讓我知道如何創建自動生成SQL2008關鍵??? – punitha 2013-03-23 08:48:36

+2

序列是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

回答

-3

你確定你正在運行的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. 
+1

沒有我使用2008 ITA不工作 – punitha 2013-03-23 08:14:38

2

創建一個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列重置爲其初始聲明的種子值。

+0

是的,我同意。我發現這個博客條目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

1
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 
1

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爲每條新紀錄遞增。

http://www.w3schools.com/sql/sql_autoincrement.asp

+1

雖然有效的答案有點不符合上下文。操作系統沒有聲明該序列是用於表格密鑰的,它可能是必需的,並且通常用於除密鑰以外的用例。 – 2016-03-03 15:28:24

3

您可以這樣做。

--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 
+1

如果在TRANSACTION中使用它,則需要更改過程以刪除TRANSACTION並刪除您插入的行,或者需要根據需要使用Job定期清理表。 – Graeme 2016-02-11 22:05:26