增加屬性應(yīng)該是這樣寫的吧
從事達(dá)州電信機(jī)房,服務(wù)器租用,云主機(jī),雅安服務(wù)器托管,空間域名,CDN,網(wǎng)絡(luò)代維等服務(wù)。
ALTER TABLE cust_id ADD cust_id_seq number(9) identity(1,1)
如果你要搞sequence
CREATE SEQUENCE cust_id_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999
NOCYCLE;
增加的時(shí)候用cust_id_seq.nextval
SQL Server沒有序列,對(duì)應(yīng)的是標(biāo)識(shí)列。
該種列具有以下三種特點(diǎn):
1、列的數(shù)據(jù)類型為不帶小數(shù)的數(shù)值類型
2、在進(jìn)行插入(Insert)操作時(shí),該列的值是由系統(tǒng)按一定規(guī)律生成,不允許空值
3、列值不重復(fù),具有標(biāo)識(shí)表中每一行的作用,每個(gè)表只能有一個(gè)標(biāo)識(shí)列。
標(biāo)識(shí)列的創(chuàng)建與修改
標(biāo)識(shí)列的創(chuàng)建與修改,通常在企業(yè)管理器和用Transact-SQL語(yǔ)句都可實(shí)現(xiàn),使用企業(yè)管理管理器比較簡(jiǎn)單,請(qǐng)參考SQL Server的聯(lián)機(jī)幫助,這
里只討論使用Transact-SQL的方法
1、創(chuàng)建表時(shí)指定標(biāo)識(shí)列
標(biāo)識(shí)列可用 IDENTITY 屬性建立,因此在SQL Server中,又稱標(biāo)識(shí)列為具有IDENTITY屬性的列或IDENTITY列。
下面的例子創(chuàng)建一個(gè)包含名為ID,類型為int,種子為1,遞增量為1的標(biāo)識(shí)列
CREATE TABLE T_test
(ID int IDENTITY(1,1),
Name varchar(50)
)
--插入數(shù)據(jù)
INSERT T_test(Name) VALUES('張三');
〉比豢梢裕??且桓霰碇兄荒苡幸桓鯥DENTITY字段!我要是想在一個(gè)表里使用多個(gè)類似IDENTITY的字段呢?如是oracle,用序列就可以實(shí)現(xiàn),只要給該字段指定一個(gè)序列就可以了!在SQLSERVER中如何實(shí)現(xiàn)呢?SQL2000可以有自定義函數(shù),我們可以自定義一個(gè)函數(shù),來產(chǎn)生一個(gè)序列,然后在給需要使用該序列的字段指定該函數(shù)即可!下面是一個(gè)例子:假設(shè):存在表CREATE TABLE tmp(identityID INT identity(1,1) PRIMARY KEY,
iID INT,
sName CHAR(2))GO其中identityID是一個(gè)IDENTITY字段,
我們創(chuàng)建以下函數(shù):
CREATE FUNCTION sqlSequence()
RETURNS INTASBEGINDECLARE @MINNUM INT
DECLARE @MAXNUM INT
SET @MINNUM=2
SET @MAXNUM=99/*您可以設(shè)置該函數(shù)允許的最大(99)、小(2)值,代表從取2-99,超過此最大值返回0(您可以加上自己的處理),
仿oracle的sequence中的設(shè)置*/RETURN( SELECT CASE
WHEN ISNULL(MAX(iID),@MINNUM-1)+1 @MAXNUM THEN 0
ELSE ISNULL(MAX(iID),@MINNUM-1)+1ENDFROM TMP)ENDGO然后給表tmp的字段iID的默認(rèn)值指定為dbo.sqlSequence(),
然后再插入時(shí)使用如下語(yǔ)句即可
insert into tmp(sname) values(1);
插入一些記錄后看看效果吧!
其實(shí)還可以給該函數(shù)加上更多的功能,如可以返回一個(gè)降序的序列,
也可以返回一個(gè)字符串的序列。
會(huì)寫存儲(chǔ)過程嗎?
會(huì)寫觸發(fā)嗎?
如果會(huì),如果能看懂以下代碼你就能完成,否則,你需要看看存儲(chǔ)過程相關(guān)的書。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION V_GetStr
(
@位數(shù) int, --需要的位數(shù)(范圍1-32)
@數(shù)值 int --需要的數(shù)值
)
RETURNS varchar(32)
AS
BEGIN
declare @r varchar(16)
declare @r2 varchar(16)
declare @r3 varchar(32)
declare @r4 varchar(32)
select @r='0000000000000000'
select @r2 = @數(shù)值
select @r3 = @r + @r2
select @r4= right(@r3,@位數(shù))
return(@r4)
END
GO
--調(diào)用示例(生成10位長(zhǎng)度的),注意以下調(diào)用需要在存儲(chǔ)過程中完成
--declare @IDme varchar(16)
--select @IDme = (select beyczyxx.ID from beyczyxx where beyczyxx.ID = 1 )
--select dbo.V_GetStr(10,@IDme)
創(chuàng)建序列后,可以實(shí)現(xiàn)表格中的列自增長(zhǎng),因?yàn)閛racle中沒有sqlserver中的自增長(zhǎng)功能,只能采用序列的方式來實(shí)現(xiàn)。使用的時(shí)候,your_sqeuence_name.Nextval即可取得序列當(dāng)前的值。
例子可以參考下面的評(píng)論:放在這個(gè)上面百度提示有不適合發(fā)表的地方。
sqlserver沒有序列這個(gè)東西,
有自增長(zhǎng)identity屬性。
可以為表的主鍵列(數(shù)字類型)增加自增長(zhǎng)屬性。