国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 克拉玛依市| 汨罗市| 谢通门县| 克拉玛依市| 温泉县| 鄂伦春自治旗| 迭部县| 云阳县| 黄浦区| 万州区| 方山县| 桐庐县| 祁东县| 大悟县| 玉山县| 土默特左旗| 安远县| 尚义县| 永宁县| 达孜县| 东山县| 桓仁| 孝昌县| 苍梧县| 澎湖县| 图木舒克市| 竹溪县| 镶黄旗| 温州市| 嘉鱼县| 渝北区| 衡南县| 射阳县| 新乡市| 叙永县| 张家川| 珲春市| 太康县| 蒲城县| 宁晋县| 武义县|