




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、利用"SQL"語句自動生成序號的兩種方式SQL Server2005數據庫中利用SQL語句自動生成序號:1.首先,我們來介紹第一種方式:查詢的SQL語句如下:select row_number() over (order by name) as rowid, from sysobjects運行的結果:rowid name1 all_columns2
2、60; all_objects3 all_parameters4 all_sql_modules5 all_views2.最后,我們來介紹第二種方式:在我們利用這種方式生成自動序號
3、時,Test_Table必須在數據庫中不能存在,因為在執行這些SQL語句的時后自動會創建表。select id=IDENTITY(int,1,1), as name into dbo.Test_Table from sysobjects 以下為實現SQL server中按年月日生成日期型自增編碼的sql腳本:/* * 測試表*/CREATE TABLE dbo.CustomIDTest ( ID int NOT NULL , Code char (8) NOT NULL)/*/* * 功能:按 YYYYxxxx 格式生成目標年份的最大編碼,
4、數據類型為 CHAR(8) * 說明:特定表范圍內有效 * 未處理溢出情況(當表中某年值已達到YYYY9999)*/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 格式生成目標年份的最大ID,數據類型為 INT * 說明:特定表范圍內有效 * 未處理溢出情況(當表中某年值已達到YYYY9999)*/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 - 測試- 自定義年份內自增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結果ID Code - -2
9、0060001 2006000120060002 2006000220060003 2006000320060004 2006000420070001 2007000120070002 2007000220070003 2007000320070004 2007000420080001 2008000120080002 2008000220080003 2008000320080004 20080004說明:1、對于此示例,一年內最大增量只有,9999,需要考慮溢出如何處理,此版本未處理2、因此,根據實際需求,我們可以選擇以“天”為編碼前綴,并且擴大自增部分長度,避免溢出,3、當然此時得考慮,
10、使用 INT 型長度是否足夠4、此版本自定義函數,使用傳入年份參數5、若欲始終使用當前系統日期,而不顯示指定年份,則需要建立一視圖來獲取當前日期(因SQLServer中標量函數,不能使用 GetDate() 這樣的非標量函數) 詳細講解有關獲取當月天數的實用技巧獲取當月天數的實用技巧:以下是引用片段:select day(dateadd(mm,1,getdate()-day(getdate() -獲得當月天數分析如下:select getdate() -當前日期 select day(getdate() -目前第幾天 select getdate()-day(g
11、etdate() -上個月最后一天 select dateadd(mm,1,getdate()-day(getdate() -加上一個月 select day(dateadd(mm,1,getdate()-day(getdate() -獲得當月天數以下是引用片段:<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(); /得到當前時間dt = new Date(dt.getFullYear(), dt.getMonth() + 1, 0); /得到本月最后一天alert(dt.getDate(
13、); / 本月最后一天即為本月的天數</script> 取一表前N條記錄 各個數據庫的不同SQL寫法從別處看到的,本人在用的是DB2,竟然都不一樣看來是不能說“會SQL,所有的數據庫用起來都一樣”了。 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子句 發布時間:2007.08.03 05:01 來源:賽迪網 作者:luoyingshu問:為什么SQL Server不允許在視圖定義使用ORDER BY子句?答: SQL Server之所以不允許在視圖定義中使用ORDER BY子句是為了遵守ANSI SQL-92標準。因為對該標準的原理分析需要對結構化查詢語言(SQL)的底層結構和它所基于的數學理論進行討
16、論,我們不能在這里對它進行充分的解釋。但是,如果你需要在視圖中指定ORDER BY子句,可以考慮使用以下方法:USE pubsGO CREATE VIEW AuthorsByNameASSELECT TOP 100 PERCENT *FROM authors ORDER BY au_lname, au_fnameGOMicrosoft在SQL Server 7.0中引入的TOP結構在同ORDER BY子句結合使用時是非常有用的。只有在同TOP關鍵詞結合使用時,SQL Server才支持在視圖中使用ORDER BY子句。注意:TOP關鍵詞是SQL Server對ANSI SQL-92
17、標準的擴展。一條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(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,造成連接的順序變化了,原來的驅動表是uidTable(最多1024條記錄),現在變成了member表做驅動(600W條)。所以這條語句變的巨慢。但是既然是外連接,為什么連接的順序會改變呢?因為
19、外連接的連接順序不是由COST決定的,而是由連接的條件決定的。發現執行計劃如下:-| 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西醫科大學晉祠學院《仿真實驗》2023-2024學年第二學期期末試卷
- 四川商務職業學院《視唱練耳(2)》2023-2024學年第一學期期末試卷
- 宜賓學院《果蔬加工與貯藏學含實驗》2023-2024學年第二學期期末試卷
- 四川水利職業技術學院《田徑實踐教學》2023-2024學年第一學期期末試卷
- 邳州市2024-2025學年五下數學期末質量檢測模擬試題含答案
- 山西省朔州市朔城區2025屆初三第三次調查研究考試語文試題含解析
- 吉林省白城市2025年初三第二次聯考數學試題試卷含解析
- 仙桃職業學院《外國建筑史(Ⅱ)》2023-2024學年第一學期期末試卷
- 鐵嶺衛生職業學院《電腦美術(AutoCAD)應用》2023-2024學年第二學期期末試卷
- 威海市文登市2025年四年級數學第二學期期末預測試題含解析
- 船用起重機作業安全操作規程培訓課件
- 挺膺擔當主題團課
- 煤礦安全監控系統施工方案
- 動火作業專項安全施工方案
- 《林業試驗設計及數據分析》講義
- 各種生活用紙售后服務方案
- 關于物業管理的論文(通用10篇)
- 2023年廣東高考生物卷試題真題及答案詳解(精校版)
- 風電場道路施工作業指導書方案
- 心理健康與身體健康
- 2022-2023學年北京市海淀區高二下學期期中練習數學試題【含答案】
評論
0/150
提交評論