利用SQL語句自動生成序號的兩種方式_第1頁
利用SQL語句自動生成序號的兩種方式_第2頁
利用SQL語句自動生成序號的兩種方式_第3頁
利用SQL語句自動生成序號的兩種方式_第4頁
利用SQL語句自動生成序號的兩種方式_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、利用SQL語句自動生成序號的兩種方式SQL Server2005數據庫中利用SQL語句自動生成序號1.首先,我們來介紹第一種方式:查詢的SQL語句如下:select row_number() over (order by name) as rowid, from sysobjects運行的結果:rowidname1all_columns2all_objects3all_parameters4all_sql_modules5all_views2.最后,我們來介紹第二種方式:在我們利用這種方式生成自動序號時,Test_Table必須在數據庫中不能存在,因為在執行這些S

2、QL語句的時后自動會創建表。select id=IDENTITY(int,1,1), asname into dbo.Test_Table from sysobjects以下為實現SQLserver中按年月日生成日期型自增編碼的sql腳本:/*測試表*/CREATE TABLE dbo.CustomIDTest(ID int NOT NULL ,Code char (8) NOT NULL)/*功能:按YYYYxxxx格式生成目標年份的最大編碼,數據類型為 CHAR(8)說明:特定表范圍內有效* 未處理溢出情況(當表中某年值已達到YYYY9999)*/CREAT

3、E FUNCTION dbo.GenCustomCode(Year INT)RETURNS CHAR(8)ASBEGINDECLARECode CHAR(8),MinCodeInYear CHAR(8),MaxCodeInYear CHAR(8)SELECT MinCodeInYear = CONVERT(CHAR(4), Year) + 0001, MaxCodeInYear = CONVERT(CHAR(4), Year) + 9999SELECT Code= MAX(Code) FROMCustomIDTest WHERECode = MinCodeInYear AND Code = M

4、inIDInYear AND ID = MaxIDInYearIF ID IS NOT NULL AND Year = ID/10000/*/*IF ID = MaxIDInYear溢出處理 */SET ID = ID + 1ELSESET ID = MinIDInYearRETURN IDEND- 測試- 自定義年份內自增INSERT INTO CustomIDTest(ID, Code)SELECT dbo.GenCustomID(DatePart(YY, DATEADD(YY, -1, GetDate(), dbo.GenCustomCode(DatePart(YY, DATEADD(Y

5、Y, -1, GetDate() UNIONSELECT dbo.GenCustomID(DatePart(YY, GetDate(), dbo.GenCustomCode(DatePart(YY, GetDate()UNIONSELECT dbo.GenCustomID(DatePart(YY, DATEADD(YY, 1, GetDate(), dbo.GenCustomCode(DatePart(YY, DATEADD(YY, 1, GetDate()SELECT * FROM CustomIDTest 結果 ID Code20060001 2006000120060002 200600

6、0220060003 2006000320060004 2006000420070001 2007000120070002 2007000220070003 2007000320070004 2007000420080001 2008000120080002 2008000220080003 2008000320080004 20080004說明:1、對于此示例,一年內最大增量只有,9999,需要考慮溢出如何處理,此版本未處理2、因此,根據實際需求,我們可以選擇以“天”為編碼前綴,并且擴大自增部分長度,避免溢出,3、當然此時得考慮,使用 INT型長度是否足夠4、此版本自定義函數,使用傳入年份參

7、數5、若欲始終使用當前系統日期,而不顯示指定年份,則需要建立一視圖來獲取當前日期(因SQLServer中標量函數,不能使用 GetDate() 這樣的非標量函數)詳細講解有關獲取當月天數的實用技巧獲取當月天數的實用技巧:以下是引用片段:selectday(dateadd(mm,1,getdate()-day(getdate()-獲得當月天數分析如下:select getdate() -當前日期select day(getdate()-目前第幾天select getdate()-day(getdate()-上個月最后一天selectdateadd(mm,1,getdate()-day(getda

8、te() -力口上一個月selectday(dateadd(mm,1,getdate()-day(getdate()- 獲得當月天數以下是引用片段:Dim dt1, dt2dt1 = Datedt1 = CDate(Year(dt1) & - & Month(dtl) & -1)得到本月第一天dt2 = DateAdd(m, 1, dt1)得到上個月第一天MsgBox DateDiff(d, dt1, dt2)得到兩個月的差以下是引用片段:var dt = new Date(); / 得到當前時間dt = new Date(dt.getFullYear(), dt.getMonth() + 1

9、,0); /得到本月最后一天alert(dt.getDate(); /本月最后一天即為本月的大數取一表前N條記錄 各個數據庫的不同 SQL寫法從別處看到的,本人在用的是 DB2,竟然都不一樣 看來是不能說 會SQL, 所有的數據庫用起來都一樣”了。1. OracleSELECT * FROM TABLE1 WHERE ROWNUM=N2. INFORMIXSELECT FIRST N * FROM TABLE13. DB25SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUMWHERE ROWNUM=NDB2SELECT COLUMN

10、 FROM TABLE FETCH FIRST N ROWS ONLY4. SQL SERVERSELECT TOP N * FROM TABLE15. SYBASESELECT TOP N * FROM TABLE16. mysql:select * from table_name limit N為什么SQL不許在視圖定義 ORDER BY子句發布時間:2007.08.03 05:01 來源:賽迪網 作者:luoyingshu問:為什么SQL Server不允許在視圖定義使用 ORDER BY子句?答:SQL Server之所以不允許在視圖定義中使用ORDER BY子句是為了遵守 ANSIS

11、QL-92標準。因為對該標準的原理分析需要對結構化查詢語言(SQL)的底層結構和它所基于的數學理論進行討論,我們不能在這里對它進行充分的解釋。但是,如果你需要在視圖中 指定ORDER BY子句,可以考慮使用以下方法:USE pubsGOCREATE VIEW AuthorsByNameASSELECT TOP 100 PERCENT *FROM authorsORDER BY au_lname, au_fnameGOMicrosoft在SQL Server 7.0中引入的TOP結構在同ORDER BY子句結合使用時是非常 有用的。只有在同 TOP關鍵詞結合使用時,SQL Server才支持在視

12、圖中使用 ORDER BY子 句。注意:TOP關鍵詞是 SQL Server對ANSI SQL-92標準的擴展。條SQL語句變得巨慢的原因及其解決方法發布時間:2008.01.30 04:58來源:賽迪網 作者:趙震現象:一條SQL突然運行的特別慢。select uidTable.column_value, first_name| |last_name, company, job_title, upper(member_level), upper(service_value)from (select * from table(select cast(multiset (select b fro

13、m bbb)as Taaa) from dual) uidTable,memberwhere uidTable.column_value = member.login_id(+) and member.site=alibaba and member.site=test;出錯原因:用戶增加了一個條件 member.site=test,造成連接的順序變化了,原來的驅動 表是uidTable(最多1024條記錄),現在變成了 member表做驅動(600W條)。所以這條語句 變的巨慢。但是既然是外連接,為什么連接的順序會改變呢?因為外連接的連接順序不是由COST決定的,而是由連接的條件決定的。發現執

14、行計劃如下:| Id | Operation | Name | Rows | Bytes | Cost | 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 | 1 | NESTED LOOPS | | 1018 | 72278 | 8155 | 2 | VIEW | | 4072 | 69224 | 11 | 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | | 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 | 5 | TABLE ACCESS FULL | BBB |

15、41 | 287 | 2 | 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |為什么根本就沒有執行外連接呢?問題出在member.site=test這個條件上,因為對外連接的表加了條件,造成外連接失效。改為 member.site(+)=test后,問題徹底解決。| Id | Operation | Name | Rows | Bytes | Cost | 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 | | 1 | NESTED LOOPS | | 1018 | 72278 | 8155 | 2 | VIEW | | 4072 | 69224 | 11 | 3 | COL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論