Translate

2011年10月25日 星期二

流水號資料表

有時後會遇到像是需要流水號編號,
可是又會刪去,並新增
這時後真的很頭大,

是有在網路上看到不錯的範例,但是因為我的選單是做成下拉式的
所以需按照新增的順序往下排,就不採用了
不過怕未來需用上,在此做個筆記一下

建立資料表:

create table T_User(F_ID int identity(1,1) not null,F_Name varchar(20) not null)

插入數據:
insert into T_User(F_Name) values('我是第一名') Select SCOPE_IDENTITY()

存儲過程:
CREATE PROCEDURE [dbo].[sp_User](@F_Name int) AS
begin tran Insertinto_T_User
Insert into  dbo.T_User(F_Name) values(@F_Name)
Select SCOPE_IDENTITY()

詳細內容可轉往→http://www.cnblogs.com/yank/archive/2008/04/16/1156713.html

另外自已寫的
很簡單:(但是老 實說不太滿意
★需找到目前流水號最大值
★取得目前所有的流水序號表
★如果有相同的流水號,就+1處理
★找到空缺(代表中間有被刪除
★一直到最大值都沒有空缺,則將最大值+1處理,為目前的流水號


 SqlCommand cmd = new SqlCommand("SELECT [id] From [tb] ORDER BY [id] DESC", Connection);
 DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
 da.Fill(dt);

                if (dt != null)
                {
                    int maxid = Int32.Parse(dt.Rows[0][0].ToString());
                    int curid = 0;
                    bool bhave = false;

                    //尋找有無間值(起始值為1,故從2開始)
                    for (int i = 2; i < maxid; i++)
                    {
                        //檢查此序號已有使用
                        bhave = false;
                       
                        foreach (DataRow dataRow in dt.Rows)
                        {
                            if (dataRow[0].ToString().Equals(i.ToString()))
                            {
                                bhave = true;
                                break;
                           }
                        }

                        if (!bhave)
                        {
                            curid = i;
                            break;
                        }
                    }

                    //無找到,加在最後面
                    if (curid == 0)
                    {
                        curid = maxid + 1;
                    }

                    tagid = curid.ToString();

沒有留言:

張貼留言