|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
ALLBEAUTY
註冊時間: 2003-08-13 文章: 22 來自: Taiwan
第 1 樓
|
發表於: 星期三 四月 21, 2004 10:35 pm 文章主題: 要如何用SQL寫出年月日流水號的自動序號 |
|
|
請問各位大大:
我要寫一個程式(例如:出貨管理),欄位中有出貨單號,編碼方式為YYYYMMDDXXX(年月日+流水號),SQL可以將欄位訂義成自動增加,但是小弟的問題是,那流水號必需每日都從001號開始.
我現在是用程式去Check作業日期是否不相同,如果日期不同則去將流水號欄位改成001.
那不知道SQL是否可以直接在新增或儲存中程序直接做有如此設定或者是您有什麼其它處理方式可以給小弟建議.(希望由資料庫來處理不要透過程式).
謝謝您的指教! |
|
回頂端 |
|
|
elleryq
註冊時間: 2007-06-21 文章: 768
第 2 樓
|
發表於: 星期四 四月 22, 2004 8:56 am 文章主題: |
|
|
寫 SQL server 的 store procedure
記得欄位預設值的地方可以填 store procedure 的名字
如此一來就可以達到你要的要求了~~ |
|
回頂端 |
|
|
ALLBEAUTY
註冊時間: 2003-08-13 文章: 22 來自: Taiwan
第 3 樓
|
發表於: 星期四 四月 22, 2004 4:06 pm 文章主題: |
|
|
Elleryq:我對SQL不是很熟,是否可以請您寫一個範例給我學習。謝謝您 |
|
回頂端 |
|
|
elleryq
註冊時間: 2007-06-21 文章: 768
第 4 樓
|
發表於: 星期五 四月 23, 2004 8:56 am 文章主題: |
|
|
老實說,我也不是很熟~~
不過我知道當我知道原理以後
就可以去翻書邊測邊寫~~ |
|
回頂端 |
|
|
ALLBEAUTY
註冊時間: 2003-08-13 文章: 22 來自: Taiwan
第 5 樓
|
發表於: 星期五 四月 23, 2004 9:17 am 文章主題: |
|
|
我了解了,謝謝您 |
|
回頂端 |
|
|
TIM001
註冊時間: 2004-04-29 文章: 4
第 6 樓
|
發表於: 星期四 四月 29, 2004 10:43 am 文章主題: |
|
|
你的意思是字段的默認欄位中填寫store procedure 的名字??但是我又如何讓它在FOPM窗口中體現出來呢? |
|
回頂端 |
|
|
summer
註冊時間: 2003-06-19 文章: 32
第 7 樓
|
發表於: 星期四 四月 29, 2004 11:27 pm 文章主題: |
|
|
elleryq 兄的方法可行,唯一的缺憾是除錯不易而且一旦出錯,資料可能返回會有問題...
給您另外一個建議,設計時,該欄位的值設成可 NULL ,然後在該資料表裡使用觸發器來完成這個欄位的計算及填寫工作,因為我在猜,您有可能是要寫會計帳用的傳票流水號欄位,這個方法比較麻煩,在您新增時,重新計算填寫該欄位,若不幸發生錯誤,您可以在設計時,決定該筆記錄要全數放棄或是不管他...
至於要form上顯示,可在觸發器完成後,由觸發器直接返回該欄位的值,由前端接收即可 |
|
回頂端 |
|
|
elleryq
註冊時間: 2007-06-21 文章: 768
第 8 樓
|
發表於: 星期二 五月 04, 2004 10:11 am 文章主題: |
|
|
哈哈~~
summer 說的沒錯喔~~
還是該聽對 MS SQL 學有專精的人說的話才對~~
|
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 9 樓
|
發表於: 星期六 五月 08, 2004 2:36 pm 文章主題: |
|
|
簡單描述一下.在Insert/Update時使用Trigger.
中使用PROCEDURE.即可完成自動編碼.
功能流程就像SUMMER說的一樣.
提共簡單的編碼方式.這只是Idea而已.要管控及強大.
自行想想羅.但已滿足功能的需求~
sample1:
代碼: | CREATE PROCEDURE [test2]
@table varchar(20),
@field varchar(20)
AS
declare @len1 int
declare @sno varchar(10)
declare @YYYYMM varchar(6)
declare @strSql varchar(100)
--取得年月
IF len(DatePart(month, getDate())) <2
set @YYYYMM=cast(DatePart(year, getDate()) as varchar) + '0' + cast(DatePart(month, getDate()) as varchar)
Else
set @YYYYMM=cast(DatePart(year, getDate()) as varchar) + cast(DatePart(month, getDate()) as varchar)
--取得編號
set @strSql='select max('+ @field +') from '+ @table +' where substring('+ @field +' ,1,6)='+ @YYYYMM
--set @sno= (select max( @field ) from @table where substring( @field ,1,6)= @YYYYMM)
print @strSql
exec (@strSql)
print @sno
GO |
sample2:
代碼: | /*自動編號
*/
CREATE PROCEDURE usp_自動編號1 @sno char(10) output
AS declare @YYYYMM char(6),
@ano char(10)
/* 取得年月 */
if datepart(month,getdate())<10
select @YYYYMM=str(datepart(year,getdate()),4)+'0'+str(datepart(month,getdate()),1)
else
begin
select @YYYYMM=str(datepart(year,getdate()),4)+str(datepart(month,getdate()),2)
end
/* 取得資料表之編號 */
select @ano=(select max(報價單號) from 客戶報價單檔 where substring(報價單號,1,6)=@YYYYMM)
/* 給定編號*/
if @ano is null
begin
select @sno=rtrim(@YYYYMM)+'0001'
/*print @sno*/
end
else
begin
select @sno=str(convert(int,max(@ano))+1)
/*print @sno*/
end
GO |
_________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 10 樓
|
發表於: 星期六 五月 08, 2004 2:55 pm 文章主題: |
|
|
elleryq 寫到: | 寫 SQL server 的 store procedure
記得欄位預設值的地方可以填 store procedure 的名字
如此一來就可以達到你要的要求了~~ |
Access有提共欄位屬性設定自動編號.
但SQL Server應該是沒有辦法這樣做吧!!
另外我使用Firebird.發覺到若是使用IbExpert的話.
它有提共一個好用功能Autoincrement.
簡化你寫自動編碼的程式.
只要勾一勾此欄位就具有自動編號的功能.
編號方式不複雜.那我根本不用去改它.
真是省時省力!! _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|