国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

如何在sqlserver2000中實(shí)現(xiàn)oracle的序列

2024-08-29 13:51:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Oracle中的序列蠻好用的,但是在sqlserver中卻沒(méi)有,您也許會(huì)說(shuō)我可以用IDENTITY來(lái)代替啊!當(dāng)然可以,但是一個(gè)表中只能有一個(gè)IDENTITY字段!我要是想在一個(gè)表里使用多個(gè)類似IDENTITY的字段呢?如是oracle,用序列就可以實(shí)現(xiàn),只要給該字段指定一個(gè)序列就可以了!在SQLSERVER中如何實(shí)現(xiàn)呢?SQL2000可以有自定義函數(shù),我們可以自定義一個(gè)函數(shù),來(lái)產(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    INT
AS
BEGIN
    DECLARE    @MINNUM    INT
    DECLARE    @MAXNUM    INT
    SET    @MINNUM=2   
    SET    @MAXNUM=99
/*
    您可以設(shè)置該函數(shù)答應(yīng)的最大(99)、小(2)值,代表從取2-99,超過(guò)此最大值返回0(您可以加上自己的處理),
    仿oracle的sequence中的設(shè)置
*/
    RETURN(    SELECT CASE   
            WHEN    ISNULL(MAX(iID),@MINNUM-1)+1 >@MAXNUM THEN    0
            ELSE    ISNULL(MAX(iID),@MINNUM-1)+1
               END
        FROM TMP)
END
GO
然后給表tmp的字段iID的默認(rèn)值指定為dbo.sqlSequence(),
然后再插入時(shí)使用如下語(yǔ)句即可
insert into tmp(sname) values('1');
插入一些記錄后看看效果吧!
其實(shí)還可以給該函數(shù)加上更多的功能,如可以返回一個(gè)降序的序列,
也可以返回一個(gè)字符串的序列。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永丰县| 长汀县| 当雄县| 彝良县| 南漳县| 新河县| 宜州市| 贵州省| 新乐市| 凭祥市| 瓮安县| 涿鹿县| 大安市| 鲁甸县| 山东省| 霍邱县| 油尖旺区| 太仆寺旗| 黔南| 宣汉县| 同江市| 剑川县| 土默特左旗| 固镇县| 长丰县| 黎川县| 蒲江县| 普兰县| 两当县| 凤山市| 庄浪县| 赤峰市| 隆德县| 高青县| 花莲县| 五常市| 赤壁市| 尼玛县| 峨眉山市| 武威市| 中卫市|