




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、利用"SQL"語句自動生成序號的兩種方式SQL Server2005數(shù)據(jù)庫中利用SQL語句自動生成序號:1.首先,我們來介紹第一種方式:查詢的SQL語句如下:select row_number() over (order by name) as rowid, from sysobjects運行的結(jié)果:rowid name1 all_columns2
2、60; all_objects3 all_parameters4 all_sql_modules5 all_views2.最后,我們來介紹第二種方式:在我們利用這種方式生成自動序號
3、時,Test_Table必須在數(shù)據(jù)庫中不能存在,因為在執(zhí)行這些SQL語句的時后自動會創(chuàng)建表。select id=IDENTITY(int,1,1), as name into dbo.Test_Table from sysobjects 以下為實現(xiàn)SQL server中按年月日生成日期型自增編碼的sql腳本:/* * 測試表*/CREATE TABLE dbo.CustomIDTest ( ID int NOT NULL , Code char (8) NOT NULL)/*/* * 功能:按 YYYYxxxx 格式生成目標(biāo)年份的最大編碼,
4、數(shù)據(jù)類型為 CHAR(8) * 說明:特定表范圍內(nèi)有效 * 未處理溢出情況(當(dāng)表中某年值已達到Y(jié)YYY9999)*/CREATE FUNCTION dbo.GenCustomCode( Year INT)RETURNS CHAR(8)AS BEGIN DECLARE Code CHAR(8), MinCodeInYear CHAR(8), MaxCodeInYear CHAR(8) SELECT MinCodeInYear = CONVERT(CHAR(4), Year) + '0001', MaxCodeInYear = CONVERT(CHAR(4), Year) +
5、39;9999' SELECT Code = MAX(Code) FROM CustomIDTest WHERE Code >= MinCodeInYear AND Code <= MaxCodeInYear IF Code IS NOT NULL AND Year = CONVERT(INT, SUBSTRING(Code, 1, 4) /*/*IF Code = MaxCodeInYear 溢出處理*/ SET Code = CONVERT(INT, Code) + 1 ELSE SET Code = MinCodeInYear RETURN Code END/*/*
6、* 功能:按 YYYYxxxx 格式生成目標(biāo)年份的最大ID,數(shù)據(jù)類型為 INT * 說明:特定表范圍內(nèi)有效 * 未處理溢出情況(當(dāng)表中某年值已達到Y(jié)YYY9999)*/CREATE FUNCTION dbo.GenCustomID( Year INT)RETURNS INTAS BEGIN DECLARE ID INT, MinIDInYear INT, MaxIDInYear INT SELECT MinIDInYear = Year*10000 + 1, MaxIDInYear = Year*10000 + 9999 SELECT ID = MAX(ID) FROM CustomIDTes
7、t WHERE ID >= MinIDInYear AND ID <= MaxIDInYear IF ID IS NOT NULL AND Year = ID/10000 /*/*IF ID = MaxIDInYear 溢出處理*/ SET ID = ID + 1 ELSE SET ID = MinIDInYear RETURN ID END - 測試- 自定義年份內(nèi)自增INSERT INTO CustomIDTest(ID, Code)SELECT dbo.GenCustomID(DatePart(YY, DATEADD(YY, -1, GetDate(), dbo.GenCus
8、tomCode(DatePart(YY, DATEADD(YY, -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結(jié)果ID Code - -2
9、0060001 2006000120060002 2006000220060003 2006000320060004 2006000420070001 2007000120070002 2007000220070003 2007000320070004 2007000420080001 2008000120080002 2008000220080003 2008000320080004 20080004說明:1、對于此示例,一年內(nèi)最大增量只有,9999,需要考慮溢出如何處理,此版本未處理2、因此,根據(jù)實際需求,我們可以選擇以“天”為編碼前綴,并且擴大自增部分長度,避免溢出,3、當(dāng)然此時得考慮,
10、使用 INT 型長度是否足夠4、此版本自定義函數(shù),使用傳入年份參數(shù)5、若欲始終使用當(dāng)前系統(tǒng)日期,而不顯示指定年份,則需要建立一視圖來獲取當(dāng)前日期(因SQLServer中標(biāo)量函數(shù),不能使用 GetDate() 這樣的非標(biāo)量函數(shù)) 詳細(xì)講解有關(guān)獲取當(dāng)月天數(shù)的實用技巧獲取當(dāng)月天數(shù)的實用技巧:以下是引用片段:select day(dateadd(mm,1,getdate()-day(getdate() -獲得當(dāng)月天數(shù)分析如下:select getdate() -當(dāng)前日期 select day(getdate() -目前第幾天 select getdate()-day(g
11、etdate() -上個月最后一天 select dateadd(mm,1,getdate()-day(getdate() -加上一個月 select day(dateadd(mm,1,getdate()-day(getdate() -獲得當(dāng)月天數(shù)以下是引用片段:<script language="VBScript">Dim dt1, dt2dt1 = Datedt1 = CDate(Year(dt1) & "-" & Month(dt1) & "-1&
12、quot;) ' 得到本月第一天dt2 = DateAdd("m", 1, dt1) ' 得到上個月第一天MsgBox DateDiff("d", dt1, dt2) ' 得到兩個月的差</script>以下是引用片段:<script language="jscript">var dt = new Date(); /得到當(dāng)前時間dt = new Date(dt.getFullYear(), dt.getMonth() + 1, 0); /得到本月最后一天alert(dt.getDate(
13、); / 本月最后一天即為本月的天數(shù)</script> 取一表前N條記錄 各個數(shù)據(jù)庫的不同SQL寫法從別處看到的,本人在用的是DB2,竟然都不一樣看來是不能說“會SQL,所有的數(shù)據(jù)庫用起來都一樣”了。 1. Oracle SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIRST N * FROM TABLE1 3. DB25 SELECT
14、* ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N DB2 SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY 4. SQL SERVER SELECT TOP N * FROM TABLE1 5. SYBASE SELECT TOP N * FROM TABLE1 6. mysql: se
15、lect * from table_name limit N 為什么SQL不許在視圖定義ORDER BY子句 發(fā)布時間:2007.08.03 05:01 來源:賽迪網(wǎng) 作者:luoyingshu問:為什么SQL Server不允許在視圖定義使用ORDER BY子句?答: SQL Server之所以不允許在視圖定義中使用ORDER BY子句是為了遵守ANSI SQL-92標(biāo)準(zhǔn)。因為對該標(biāo)準(zhǔn)的原理分析需要對結(jié)構(gòu)化查詢語言(SQL)的底層結(jié)構(gòu)和它所基于的數(shù)學(xué)理論進行討
16、論,我們不能在這里對它進行充分的解釋。但是,如果你需要在視圖中指定ORDER BY子句,可以考慮使用以下方法:USE pubsGO CREATE VIEW AuthorsByNameASSELECT TOP 100 PERCENT *FROM authors ORDER BY au_lname, au_fnameGOMicrosoft在SQL Server 7.0中引入的TOP結(jié)構(gòu)在同ORDER BY子句結(jié)合使用時是非常有用的。只有在同TOP關(guān)鍵詞結(jié)合使用時,SQL Server才支持在視圖中使用ORDER BY子句。注意:TOP關(guān)鍵詞是SQL Server對ANSI SQL-92
17、標(biāo)準(zhǔn)的擴展。一條SQL語句變得巨慢的原因及其解決方法 發(fā)布時間:2008.01.30 04:58 來源:賽迪網(wǎng) 作者:趙震現(xiàn)象:一條SQL突然運行的特別慢。select uidTable.column_value, first_name|' '|last_name, company, job_title, upper(member_level), upper(service_value)from (select * from table(select cast(mu
18、ltiset(select b from bbb)as Taaa) from dual) uidTable,memberwhere uidTable.column_value = member.login_id(+) and member.site='alibaba' and member.site='test'出錯原因:用戶增加了一個條件member.site=test,造成連接的順序變化了,原來的驅(qū)動表是uidTable(最多1024條記錄),現(xiàn)在變成了member表做驅(qū)動(600W條)。所以這條語句變的巨慢。但是既然是外連接,為什么連接的順序會改變呢?因為
19、外連接的連接順序不是由COST決定的,而是由連接的條件決定的。發(fā)現(xiàn)執(zhí)行計劃如下:-| 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 | 41 | 287 | 2 | 6 | TABL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軍事理論課程考試試卷及答案解析
- 2025年科學(xué)研究方法論考試試卷及答案
- 2025年口腔醫(yī)學(xué)專業(yè)研究生入學(xué)考試試卷及答案
- 2025年歷史學(xué)科知識水平考試試題及答案
- 和公司包工合同協(xié)議
- 民事交通調(diào)解協(xié)議書模板
- 武漢口譯服務(wù)合同協(xié)議
- 品牌傳媒公司合同協(xié)議
- 商業(yè)用氣合同協(xié)議
- 比亞德購車合同協(xié)議
- 網(wǎng)絡(luò)教育能VS不能取代傳統(tǒng)教育形式辯論賽-反方辯詞一辯、二辯、三辯、四辯發(fā)言稿
- 軟件工程實驗報告 概要設(shè)計
- 心衰評估量表
- 應(yīng)用翻譯-華東交通大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 大學(xué)生性健康教育智慧樹知到答案章節(jié)測試2023年南昌大學(xué)
- 2、圓口綱完整版課件
- JB/T 20173-2016輥壓干法制粒機
- 外科護理學(xué)題庫(中專)
- DB2110T 0004-2020 遼陽地區(qū)主要樹種一元、二元立木材積表
- 建設(shè)工程施工項目每日“防高墜三檢”檢查記錄表
- 住建部《建筑業(yè)10項新技術(shù)(2017版)》解讀培訓(xùn)課件
評論
0/150
提交評論