當前位置:首頁 » 編程語言 » 5sql是指什麼

5sql是指什麼

發布時間: 2022-11-28 11:00:11

1. 5個sql的查詢問題

--1:列出所有商品名稱及每個proct被order(購買)的次數
selecta.ProctName,count(b.OrderID)asorderTimes
fromproctsasa
joinorder_detailsasb
ona.ProctID=b.ProctID
groupbya.ProctName

--2:列出小於10次購買的商品名稱(proctnames)和數量
selecta.ProctName,sum(b.Quantity)asQuantity
fromproctsasa
joinorder_detailsasb
ona.ProctID=b.ProctID
groupbya.ProctName
havingcount(b.OrderID)<10

--3:所有proct的平均價格
selectavg(UnitPrice)asavgPrice
fromprocts

--4:所有order的運輸價格(Freight)
selectsum(Freight)asFreight
fromorders

--5:proctID和平均購買數量
selectProctID,avg(Quantity)asavgQuantity
fromorder_details
groupbyProctID

2. 第五章 SQL定義表(一)

可以通過定義表(使用 CREATE TABLE )或通過定義投影到表的持久類來創建表:

由於以下原因,這兩個名字之間的對應關系可能不相同:

表、視圖或存儲過程名稱可以是限定的( schema.name ),也可以是限定的( name )。

模式名遵循標識符約定,需要特別注意非字母數字字元的使用。
模式名不應該指定為帶分隔符的標識符。
嘗試指定「USER」或任何其他SQL保留字作為模式名會導致 SQLCODE -312 錯誤。
INFORMATION_SCHEMA 模式名和相應的信息。
模式包名在所有命名空間中保留。
用戶不應該在這個模式/包中創建表/類。

當執行一個創建操作(比如 create TABLE ),指定一個還不存在的模式時,InterSystems IRIS將創建新的模式。
InterSystems IRIS使用模式名生成相應的包名。
由於模式及其對應包的命名約定不同,用戶應該注意非字母數字字元的名稱轉換注意事項。
這些名稱轉換的注意事項與表不同:

INFORMATION_SCHEMA 模式名和相應的信息。
模式包名在所有命名空間中保留。
用戶不應該在這個模式/包中創建表/類

在所有名稱空間中保留 IRIS_Shard 模式名。
用戶不應在此模式中創建表、視圖或過程。
存儲在 IRIS_Shard 模式中的項不會通過編目查詢或 INFORMATION_SCHEMA 查詢顯示。

初始設置是對所有名稱空間(系統范圍)使用相同的默認模式名。
可以為所有命名空間設置相同的默認模式名,也可以為當前命名空間設置默認模式名。

如果創建了一個具有非限定名稱的表或其他項,InterSystems IRIS將為其分配默認模式名和相應的持久類包名。
如果一個命名的或默認的模式不存在,InterSystems IRIS將創建模式(和包),並將創建的項分配給該模式。
如果刪除模式中的最後一項,InterSystems IRIS將刪除該模式(和包)。
下面的模式名解析描述適用於表名、視圖名和存儲過程名。

系統范圍的初始默認模式名是 SQLUser 。
對應的持久類包名是 User 。
因此,非限定表名 Employee 或限定表名 SQLUser 。
Employee 將生成類 User.Employee 。

因為 USER 是一個保留字,嘗試用 USER 的模式名(或任何SQL保留字)指定限定名會導致 SQLCODE -1 錯誤。

要返回當前默認模式名,請調用 $SYSTEM.SQL.DefaultSchema() 方法:

或者使用以下預處理器宏:

可以使用以下任意一種方式更改默認模式名:

注意:當更改默認的SQL模式名稱時,系統將自動清除系統上所有名稱空間中的所有緩存查詢。
通過更改默認模式名稱,可以更改所有包含非限定表、視圖或存儲過程名稱的查詢的含義。
強烈建議在安裝InterSystems IRIS時建立默認的SQL模式名,以後不要修改。

模式名用於生成相應的類包名。
因為這些名稱有不同的命名約定,所以它們可能不相同。

可以通過將其設置為系統范圍的默認模式來創建與SQL保留字同名的模式,但是不建議這樣做。
名為 User 的默認模式根據類命名唯一性約定,生成相應的類包名稱 User0 。

如果指定 _CURRENT_USER/name 作為默認模式名,其中name是選擇的任意字元串,那麼InterSystems IRIS將當前登錄進程的用戶名分配為默認模式名。
如果進程沒有登錄,則name將用作默認的模式名。
例如,如果進程沒有登錄, _CURRENT_USER/HMO 使用HMO作為默認模式名。

在 $SYSTEM.SQL.SetDefaultSchema() 中,指定 "_CURRENT_USER" 作為帶引號的字元串。

訪問一個現有的表(或視圖,或存儲過程)進行DML操作時,將從模式搜索路徑中提供一個非限定的名稱。
按照指定的順序搜索模式,並返回第一個匹配項。
如果在搜索路徑中沒有找到匹配的模式,或者沒有搜索路徑,則使用默認的模式名。
(注意, #Import 宏指令使用了不同的搜索策略,不會「失敗」到默認的模式名。)

如果非限定名與模式搜索路徑中指定的任何模式或默認模式名不匹配,則會發出 SQLCODE -30 錯誤,例如: SQLCODE: -30 消息: Table 'PEOPLE' not found in schemas: CUSTOMERS,EMPLOYEES,SQLUSER 。

當創建一個基於odbc的查詢以通過Mac上的Microsoft query從Microsoft Excel運行時,如果從可用的表列表中選擇一個表,則生成的查詢不包括該表的模式(相當於類的包)。
例如,如果選擇從示例模式返回 Person 表的所有行,則生成的查詢為:

因為InterSystems IRIS將不限定的表名解釋為 SQLUser 模式中的表名,所以該語句要麼失敗,要麼從錯誤的表返回數據。
要糾正這一點,編輯查詢(在SQL View選項卡上),顯式引用所需的模式。
然後查詢應該是:

INFORMATION.SCHEMA 。
SCHEMATA persistent 類列出當前名稱空間中的所有模式。

下面的示例返回當前命名空間中的所有非系統模式名:

Management Portal SQL界面的左側允許查看模式(或匹配篩選器模式的多個模式)的內容。

每個表在其模式中都有一個唯一的名稱。
一個表有一個SQL表名和一個對應的持久化類名;
這些名稱在允許的字元、區分大小寫和最大長度方面有所不同。
如果使用SQL CREATE TABLE 命令定義,則指定遵循標識符約定的SQL表名;
系統生成一個對應的持久化類名。
如果定義為持久類定義,則必須指定只包含字母和數字字元的名稱;
這個名稱既用作區分大小寫的持久類名,也用作(默認情況下)對應的不區分大小寫的SQL表名。
可選的 SqlTableName class 關鍵字允許用戶指定不同的SQL表名。

當使用 CREATE TABLE 命令創建表時,InterSystems IRIS使用表名生成相應的持久化類名。
由於表及其對應類的命名約定不同,用戶應該注意非字母數字字元的名稱轉換:

同一個模式中的視圖和表不能具有相同的名稱。
嘗試這樣做會導致 SQLCODE -201 錯誤。

可以使用 $SYSTEM.SQL.TableExists() 方法確定一個表名是否已經存在。
可以使用 $SYSTEM.SQL.ViewExists() 方法確定視圖名是否已經存在。
這些方法還返回與表或視圖名稱對應的類名。
管理門戶SQL interface Catalog Details表信息選項顯示與所選SQL表名稱對應的類名。

試圖指定 「USER」 或任何其他SQL保留字作為表名或模式名會導致 SQLCODE -312 錯誤。
要指定SQL保留字作為表名或模式名,可以指定名稱作為帶分隔符的標識符。
如果使用帶分隔符的標識符指定包含非字母數字字元的表或模式名,InterSystems IRIS將在生成相應的類或包名時刪除這些非字母數字字元。

適用以下表名長度限制:

在SQL中,每條記錄都由一個唯一的整數值標識,這個整數值稱為 RowID 。
在InterSystems SQL中,不需要指定 RowID 欄位。
當創建表並指定所需的數據欄位時,會自動創建RowID欄位。
這個 RowID 在內部使用,但沒有映射到類屬性。
默認情況下,只有當持久化類被投影到SQL表時,它的存在才可見。
在這個投影表中,將出現一個額外的 RowID 欄位。
默認情況下,這個欄位被命名為 「ID」 ,並分配給第1列。

默認情況下,當在表中填充數據時,InterSystems IRIS將從1開始向該欄位分配連續的正整數。 RowID 數據類型為 BIGINT(%Library.BigInt) 。為 RowID 生成的值具有以下約束:每個值都是唯一的。不允許使用 NULL 值。排序規則是精確的。 默認情況下,值不可修改。

默認情況下,InterSystems IRIS將此欄位命名為 「 ID」 。但是,此欄位名稱不是保留的。每次編譯表時都會重新建立 RowID 欄位名。如果用戶定義了一個名為 「 ID」 的欄位,則在編譯表時,InterSystems IRIS會將 RowID 命名為 「 ID1」 。例如,如果用戶隨後使用 ALTER TABLE 定義了一個名為 「 ID1」 的欄位,則表編譯會將 RowID 重命名為 「 ID2」 ,依此類推。在持久性類定義中,可以使用 SqlRowIdName 類關鍵字直接為此類投影到的表指定 RowID 欄位名。由於這些原因,應避免按名稱引用 RowID 欄位。

InterSystems SQL提供了 %ID 偽列名稱(別名),無論分配給 RowID 的欄位名稱如何,該偽列名稱始終返回 RowID 值。 (InterSystems TSQL提供了 $IDENTITY 偽列名稱,其作用相同。)

ALTER TABLE 無法修改或刪除 RowID 欄位定義。

將記錄插入表中後,InterSystems IRIS將為每個記錄分配一個整數ID值。 RowID 值始終遞增。它們不被重用。因此,如果已插入和刪除記錄,則 RowID 值將按升序排列,但可能不連續。

可以通過設置 SetDDLUseSequence() 方法,將InterSystems IRIS配置為使用 $INCREMENT 執行 ID 分配。若要確定當前設置,請調用 $ SYSTEM.SQL.CurrentSettings() 方法。

在持久性類定義中, IdLocation 存儲關鍵字global(例如,對於持久性類 Sample.Person:<IdLocation> ^ Sample.PersonD </ IdLocation> )包含RowID計數器的最高分配值。 (這是分配給記錄的最高整數,而不是分配給進程的最高整數。)請注意,此RowID計數器值可能不再與現有記錄相對應。要確定是否存在具有特定RowID值的記錄,請調用表的 %ExistsId() 方法。

通過 TRUNCATE TABLE 命令重置 RowID 計數器。即使使用 DELETE 命令刪除表中的所有行,也不會通過 DELETE 命令將其重置。如果沒有數據插入表中,或者已使用 TRUNCATE TABLE 刪除所有表數據,則 IdLocation 存儲關鍵字全局值未定義。

默認情況下, RowID 值不可用戶修改。嘗試修改 RowID 值會產生 SQLCODE -107 錯誤。覆蓋此默認值以允許修改 RowID 值可能會導致嚴重的後果,只有在非常特殊的情況下並應格外謹慎。 Config.SQL.AllowRowIDUpdate 屬性允許 RowID 值是用戶可修改的。

通過定義一個用於投影表的持久類,可以定義 RowID 以具有欄位或欄位組合中的值。為此,請使用 IdKey index 關鍵字指定一個索引。例如,一個表可以具有一個 RowID ,其 RowId 通過在 PatientName [IdKey] 上指定索引定義 IdxId 來與 PatientName 欄位的值相同;或者可以通過指定索引定義 IdxId 來將 PatientName 和 SSN 欄位的組合值在 (PatientName,SSN)[IdKey]; 上。

當 RowID 基於多個欄位時, RowID 值是由 || 連接的每個組成欄位的值。操作員。例如, Ross,Betsy || 123-45-6789 。 InterSystems IRIS嘗試確定基於多個欄位的 RowID 的最大長度。如果無法確定最大長度,則 RowID 長度默認為512。

用作外鍵引用的 RowID 必須是公共的。

默認情況下,不能將具有公共 RowID 的表用作源表或目標表,以使用 INSERT INTO Sample.DupTable SELECT * FROM Sample.SrcTable 將數據復制到重復表中。

可以使用Management Portal SQL界面「目錄詳細信息欄位」列出「隱藏」列來顯示 RowID 是否被隱藏。

可以使用以下程序返回指定欄位(在此示例中為 ID )是否被隱藏:

3. java軟體工程師必須要會的。4個頁面,5條sql語句,6個java方法各指的什麼

http://www.cnblogs.com/never-z123/p/6130690.html
java web 的一個小項目,

4. 如何用SQL2005建立一個簡單的公司資料庫

一份設計合理的資料庫,對程序開發可以達到事半功倍的效果,對於後期維護、二次開發的重要性更是不言而喻。

數據設計、實現過程中的注意事件(個人觀點):

1.命名規范:

1)表:模塊前綴+英文單詞,如 BBS_UserInfo;
2)欄位:表前綴+英文單詞,如 U_Name;

2.三大範式:

盡量滿足資料庫設計三大範式。

第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。
第二範式(2NF):要求資料庫表中的每個實例或行必須可以被惟一地區分,資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。
第三範式(3NF):要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息,在第二範式的基礎上,數據表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。

3.數據結構:

建立必要的主外鍵關系、建立好多表查詢聯合查詢、復雜條件查詢的儲存過程等等。

4.保留資料庫設計文檔(這點對於二次開發尤為重要)。

--------------友情分割線(以下為收藏資料,已忘記原出處)--------------

1資料庫表及欄位命名、設計規范
1.1資料庫表資料庫表的命名規范:
表的前綴應該用系統或模塊的英文名的縮寫(全部大寫或首字母大寫)。如果系統功能簡單,沒有劃分為模塊,則可以以系統英文名稱的縮寫作為前綴,否則以各模塊的英文名稱縮寫作為前綴。例如:如果有一個模塊叫做BBS(縮寫為BBS),那麼你的資料庫中的所有對象的名稱都要加上這個前綴:BBS_ + 資料庫對象名稱,BBS_CustomerInfo標示論壇模塊中的客戶信息表
表的名稱必須是易於理解,能表達表的功能的英文單詞或縮寫英文單詞,無論是完整英文單詞還是縮寫英文單詞,單詞首字母必須大寫。如果當前表可用一個英文單詞表示的,請用完整的英文單詞來表示;例如:系統資料中的客戶表的表名可命名為:SYS_Customer。如果當前表需用兩個或兩個以上的單詞來表示時,盡量以完整形式書寫,如太長可採用兩個英文單詞的縮寫形式;例如:系統資料中的客戶物料表可命名為:SYS_CustItem。

表名稱不應該取得太長(一般不超過三個英文單詞)。
在命名表時,用單數形式表示名稱。例如,使用 Employee,而不是 Employees。
對於有主明細的表來說。明細表的名稱為:主表的名稱 + 字元Dts。例如:采購定單的名稱為:PO_Order,則采購定單的明細表為:PO_OrderDts
對於有主明細的表來說,明細表必須包含兩個欄位:主表關鍵字、SN,SN欄位的類型為int型,目的為與主表關鍵字聯合組成明細表的關鍵字,以及標示明細記錄的先後順序,如1,2,3……。
表必須填寫描述信息
後台表名盡量與前台表名相同,後台獨有的表應以_b作為後綴。如r_gggd_b
1.2表欄位
 命名規范
資料庫欄位的命名必須遵循以下規范:
採用有意義的欄位名。欄位的名稱必須是易於理解,能表達欄位功能的英文單詞或縮寫英文單詞,單詞首字母必須大寫,一般不超過三個英文單詞。例如:人員信息表中的電話號碼可命名為:Telephone或Tel。產品明細表中的產品名稱可用ProctName表示。(推薦一般用完整的英文單詞)。

系統中所有屬於內碼欄位(僅用於標示唯一性和程序內部用到的標示性欄位),名稱取為:「ID」,採用整型或長整型數,具體根據可能的數據量確定,增加記錄時取最大值加1,該欄位通常為主關鍵字。

系統中屬於是業務范圍內的編號的欄位,其代表一定的業務信息,比如資料信息和單據的編號,這樣的欄位建議命名為:「Code」,其數據類型為varchar,該欄位需加唯一索引。

在命名表的列時,不要重復表的名稱;例如,在名為 Employee 的表中避免使用名為 EmployeeLastName 的欄位。

不要在列的名稱中包含數據類型。

設計規范
所有欄位在設計時,除以下數據類型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必須有默認值。字元型的默認值為一個空字元值串』』;數值型的默認值為數值0;邏輯型的默認值為數值0;
其中:系統中所有邏輯型中數值0表示為「假」;數值1表示為「真」。
datetime、smalldatetime類型的欄位沒有默認值,必須為NULL。

當欄位定義為字元串形時建議使用varchar而不用nvarchar。

建議在大多數表中(如報銷單,申請單),應都有以下欄位:
欄位名說明類型默認值
CreatorID創建者int0
CreatedTime創建時間DatetimeNULL

欄位的描述
資料庫中每個欄位的描述(Description)如下:

盡量遵守第三範式的標准(3NF)。
表內的每一個值只能被表達一次
表內的每一行都應當被唯一的標示
表內不應該存儲依賴於其他鍵的非鍵信息

如果欄位事實上是與其它表的關鍵字相關聯而未設計為外鍵引用,需建索引。

如果欄位與其它表的欄位相關聯,需建索引。

如果欄位需做模糊查詢之外的條件查詢,需建索引。

除了主關鍵字允許建立簇索引外,其它欄位所建索引必須為非簇索引。

欄位必須填寫描述信息

2存貯過程命名及設計規范
2.1命名規范
存貯過程的命名請遵循以下命名規范:USP _ + 系統模塊縮寫(與表前綴類似)+_ + 功能標識 + 代表存貯過程操作的主要表名(不帶前綴)或功能的英文單詞或英文單詞縮寫。
如果一個存貯過程只對一個表進行操作,建議存貯過程的名稱就用存貯過程所操作的表的表名(不帶前綴)。這樣有利於根據表名找到相應的存貯過程。
為了在眾多的存貯過程中能很快的找到並維護存貯過程,我們按存貯過程的作用將系統的存貯過程
進行以下的分類及命名:(以下示例假設存貯過程所在的模塊名為ORG)
作用第一前綴第二前綴名
(功能標識)示例
用於新增的存貯過程USP_ORGAddUSP_ORG_Add_Employee
用於修改的存貯過程USP_ORGUptUSP _ORG_Upt_Employee
用於刪除的存貯過程USP_ORGDelUSP _ORG_Del_Employee
用於單據查詢的存貯過程USP_ORGQryUSP _ORG_Qry_Employee
用於報表統計的存貯過程USP_ORGRptUSP _ORG_Rpt_GetEmployee
用於一些特殊過程處理的存貯過程USP_ORGOthUSP _ORG_Oth_SetSystemMessage

如果系統中的存貯過程只有一級,則遵照以上規則命名,如果存在多級,則需要區分其屬於哪一級,具體為:USP + 所屬的級次 + _ + 後面的部分
例如:
1.USP1_ORG_Add_Subject (沒有調用其它存貯過程)
2.USP2_ORG_Upt_Subject (調用了第1級的存貯過程)
3.USP3_ORG_Qry_Subject (調用了第2級的存貯過程)

2.2設計規范
在存貯過程中必須說明以下內容:
目的:說明此存貯過程的作用。
作者:首次創建此存貯過程的人的姓名。在此請使用中文全名,不允許使用英文簡稱。
創建日期:創建存貯過程時的日期。
修改記錄:
修改記錄需包含修改順序號、修改者、修改日期、修改原因,修改時不能直接在原來的代碼上修改,也不能刪除原來的代碼,只能先將原來的代碼注釋掉,再重新增加正確的代碼。修改順序號的形式為:log1,log2,log3。。。,根據修改次數順序增加,同時在注釋掉的原來的代碼塊和新增的正確代碼塊前後註明修改順序號。
對存貯過程各參數及變數的中文註解。
示例如下:

/*
目的:根據部門與物料和會計區間查詢生產現場領料匯總報表
作者:李奇
創建日期:2002-12-11
*/

/*
修改順序號:log1
修改者:劉敏
修改日期:2002.12.22
修改原因:(具體原因詳細描述)
*/

CREATE PROCEDURE [dbo].[USP_GetLMSSum]
@ProctionType int=1, --生產類型(1-自製;0-委外加工)
@DeptID int=0, --生產部門
@ItemID int=0, --物料
@StartDate datetime='2002-11-26',--會計區間開始日期
@EndDate datetime='2002-12-25'--會計區間截止日期
AS

/*
log1 old
--自製領料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
ISNULL(dbo.fItem.Model, N'') AS Model, ISNULL(dbo.fUnit.UnitName, N'')
AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
dbo.mLMS.CreateTime
end log1 old
*/
--log1 new
--自製領料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
ISNULL(dbo.fItem.Model, N'') AS Model, ISNULL(dbo.fUnit.UnitName, N'')
AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
dbo.mLMS.CreateTime
--end log1 new

3 視圖命名規范
3.1命名規范
視圖的命名請遵循以下命名規范:UV _ + 系統模塊縮寫(與表前綴類似)+_ + 功能標識 + 代表視圖查詢的主要表名(不帶前綴)或功能的英文單詞或英文單詞縮寫。
如果一個視圖只對一個表進行查詢,建議視圖的名稱就用視圖所查詢的表的表名(不帶前綴)。這樣有利於根據表名找到相應的視圖。
為了在眾多的視圖中能很快的找到並維護視圖,我們按其作用將系統的視圖
進行以下的分類及命名:(以下示例假設視圖所在的模塊名為ORG)
作用第一前綴第二前綴名
(功能標識)示例
用於單據查詢的視圖UV_ORGQryUV_ORG_Qry_Employee
用於報表統計的視圖UV_ORGRptUV_ORG_Rpt_GetEmployee
用於一些特殊過程處理的視圖UV_ORGOthUV_ORG_Oth_SetSystemMessage

如果系統中的視圖只有一級,則遵照以上規則命名,如果存在多級,則需要區分其屬於哪一級,具體為:UV + 所屬的級次 + _ + 後面的部分
例如:
UV1_ORG_Add_Subject (沒有調用其它視圖)
UV2_ORG_Upt_Subject (調用了第1級的視圖)
UV3_ORG_Qry_Subject (調用了第2級的視圖)

3.2 設計規范
在視圖中必須說明以下內容:
目的:說明此視圖的作用。
創建者:首次創建此視圖的人的姓名。在此請使用中文全名,不允許使用英文簡稱。
修改者、修改日期、修改原因:如果有人對此視圖進行了修改,則必須在此視圖的前面加註修改者姓名、修改日期及修改原因。
對視圖各參數及變數的中文註解。
示例如下:
/*
目的:查詢本月所要培訓的科目
創建:加菲貓
時間:2001-3-3
修改者:Dyan 修改日期:2002-12-11
修改原因及內容:學員不需要培訓,將不需要培訓的課程去掉。
修改者:周明 修改日期:2002-4-2
修改原因及內容:增加一門新課程
*/
CREATE VIEW dbo.USP_AddSubject
AS
SELECT SubjectIId AS 課程編號
FROM dbo.ZfLocaleDecide

3.3 存儲過程和事務處理
如果事務處理在存儲過程返回時的嵌套層次與執行時的層次不同,SQL Server會顯示信息提示事務處理嵌套失控。因為存儲過程並不異常終止該批處理,在執行和確認隨後的語句時,過程內的rollback tran 會導致數據完整性損失。
在編寫存儲過程時,應遵守以下原則:
1.過程對@@trancount應無凈改變。
2.僅當存儲過程發出begin tran語句時,才發出rollback tran。

3.4 其他注意事項
存儲過程應該堅實可靠的,因為它們是駐留在伺服器中,被頻繁使用的。應仔細檢查參數的有效性,並在有問題時返回出錯信息。應確保參數的數據類型和被比較的欄的數據類型匹配,從而避免數據類型匹配錯誤。在每個SQL語句之後要檢查@@error。

4觸發器編碼規范
4.1命名規范
觸發器名為相應的表名加上後綴

Insert觸發器加'_i',Delete觸發器加'_d',Update觸發器加'_u',如:r_bch_i,r_bch_d,r_bch_u。

4.2 設計規范
在觸發器中必須說明以下內容:
目的:說明此觸發器的作用。
創建者:首次創建人的姓名。在此請使用中文全名,不允許使用英文簡稱。
修改者、修改日期、修改原因:如果有人對此視圖進行了修改,則必須在此視圖的前面加註修改者姓名、修改日期及修改原因。
對其中各參數及變數的中文註解。

4.3範例
下面通過一個例子,說明觸發器編程中應遵守的規范:

/* delete related r_a according to deleted table */
CREATE TRIGGER r_a_d ON r_a
FOR DELETE
AS
IF @@ROWCOUNT = 0 -no rows deleted
RETURN

/* delete r_b table related to deleted table */
DELETE r_b
FROM r_b b, deleted d
WHERE b.id=d.id
IF @@ERROR != 0
BEGIN
RAISERROR("Error occurred deleting related records", 16, 1)
ROLLBACK TRAN
END
RETURN

作以下幾點說明:
1.檢查是否有行被修改。注意:不論數據是否被修改,觸發器都會引發,執行情況取決於T-SQL語句的執行,而和任何潛在的where子句是否執行無關。
2.因為被刪除行在該表中不再可用,所以應在被刪除的表中查看。
3.檢查T-SQL語句的返回代碼,以捕獲任何出錯條件。
4.4 事務過程中的觸發器
1.觸發器內的rollback將所有工作返回至最外層的begin tran,完成觸發器內的處理並異常終止當前的批處理。
2.不可以從觸發器內部返回至某個已命名的事務過程,這將產生運行錯誤,掛起所有工作並終止批處理。
5 SQL語言編碼規范
5.1所有關鍵字必須大寫。
如:INSERT、UPDATE、DELETE、SELECT及其子句。
IF……ELSE、CASE、DECLARE等。

所有函數及其參數中除用戶變數以外的部分必須大寫。

在定義變數時用到的數據類型必須小寫。
所有關鍵字必須大寫
5.2注釋
注釋可以包含在批處理中。在觸發器、存儲過程中包含描述性注釋將大大增加文本的可讀性和可維護性。本規范建議:
1、注釋以英文為主。
實際應用中,發現以中文注釋的SQL語句版本在英文環境中不可用。為避免後續版本執行過程中發生某些異常錯誤,建議使用英文注釋。
2、注釋盡可能詳細、全面。
創建每一數據對象前,應具體描述該對象的功能和用途。
傳入參數的含義應該有所說明。如果取值范圍確定,也應該一並說明。取值有特定含義的變數(如boolean類型變數),應給出每個值的含義。
3、注釋語法包含兩種情況:單行注釋、多行注釋
單行注釋:注釋前有兩個連字元(--),最後以行尾序列(CR-LF)結束。一般,對變數、條件子句可以採用該類注釋。
多行注釋:符號/*和*/之間的內容為注釋內容。對某項完整的操作建議使用該類注釋。
4、注釋簡潔,同時應描述清晰。
5函數注釋:
編寫函數文本--如觸發器、存儲過程以及其他數據對象--時,必須為每個函數增加適當注釋。該注釋以多行注釋為主,主要結構如下:
/************************************************************************
*name : --函數名
*function : --函數功能
*input : --輸入參數
*output : --輸出參數
*author : --作者
*CreateDate : --創建時間
*UpdateDate : --函數更改信息(包括作者、時間、更改內容等)
*************************************************************************/
CREATE PROCEDURE sp_xxx


5.3條件執行語句if…else
條件語句塊(statenemt block,以 begin…end為邊界)僅在if子句的條件為真時才被執行。
為提高代碼的可讀性,建議嵌套不多於5層。還有,當嵌套層次太多時,應該考慮是否可以使用case語句。

5.4重復執行while和跳轉語句goto
需要多次執行的語句,可以使用while結構。其中,控制while循環的條件在任何處理開始之前需要先執行一次。循環體中的保留字break無條件的退出while循環,然後繼續處理後續語句;保留字continue重新計算while條件,如果條件為真,則從循環開始處重新執行各語句。
使用跳轉語句goto和標簽label也可以方便地實現循環和其他更靈活的操作。SQL SERVER僅具有單通道語法分析器,因此不能解析對尚未創建的對象所做的前向參考。換言之,跳轉到某標簽的後續語句應該是可執行的(如不存在可能尚未創建的數據對象)。

5.5書寫格式
資料庫伺服器端的觸發器和存儲過程是一類特殊的文本,為方便開發和維護,提高代碼的易讀性和可維護性。規范建議按照分級縮進格式編寫該文本。
順序執行的各命令位於同一級;條件語句塊(statenemt block,以 begin…end為邊界)位於下一級,類推。
SQL語句是該文本的主體。為適應某些教復雜的用戶需求,SQL語句可能比較龐大。為方便閱讀和維護,規范建議按照SQL語句中系統保留字的關鍵程度再劃分為三級。具體分級請參照下表。其中,非系統保留字(如欄位名、數據表名、標點符號)相對本級保留字再縮進一級。多個連續的非保留字可以分行書寫,也可以寫在同一行。當WHERE包含的條件子句教復雜時,應該每行只寫一個條件分句,並為重要的條件字句填寫單行注釋。
在保證基本縮進格式的前提下,可以通過對齊某些重要關鍵字(如條件關鍵字AND、OR,符號 = 、 <> 等)來進一步提高文本的易讀性和可維護性。
相鄰兩級的縮進量為10個空格。這也是ISQL編輯器默認的文本縮進量。另外,在ISQL編輯器中,一個TAB鍵也相當於10個空格。

6數據對象的國際化
6.1關於數據對象的命名
數據對象和變數的命名一律採用英文字元。禁止使用中文命名。其他命名注意事項和規范請參考2命名規則。

6.2關於RAISERROR
SQL SERVER 系統的RAISERROR命令能夠把某個出錯情況返回給調用過程,這對說明調用過程的執行情況很有必要;同時可以部分避免客戶端的冗餘操作。另外,結合系統存儲過程sp_addmessage和sp_dropmessage可以方便實現數據對象在SQL SERVER端的國際化。
SQL SERVER的MASTER資料庫中有錯誤信息數據表sysmessages,專門用於存儲系統和用戶的錯誤提示及相關信息(如錯誤ID號、錯誤等級、狀態)。用戶可以調用sp_addmessage和sp_dropmessage預先將各類錯誤信息記入該數據表。其中,不同的錯誤信息用錯誤ID號區分。在編寫存儲過程代碼時,調用RAISERROR函數從錯誤信息表sysmessages中引用相關錯誤ID號的錯誤信息。
由於0~50000的值是保留為 SQL SERVER使用的,所以用戶自定義錯誤信息的錯誤ID號必須大於50000。
RAISERROR的語法如下:
RAISERROR ({msg_id | msg_str}, severity, state )
本規范建議存儲過程以RAISERROR和RETURN返回。
舉例如下:
l第一步:生成該錯誤信息
/*insert a error message into the master..sysmessages*/
sp_addMessage 50001 ,16 ,'Can"t update the primary key from table %s'

l第二步:執行存儲過程sp_xxx,異常返回時引用上述錯誤信息
CREATE PROCEDURE sp_xxx
BEGIN

RAISERROR(50001 ,16 ,1 ,'r_a') -- Can"t update the primary key from table r_a
ROLLBACK TRAN
RETURN(1)
END

l第三步:在DELPHI調用中,通過EDBEngineError捕捉該錯誤
try
sp_test.execProc ;
except
on e :EDBEngineError
if e.errors[1].errorcode = 13059 then
/*hint 'Can"t update the primary key from table r_a'*/
showMessage(e.errors[1].message)
end ;

l第四步:當不再使用該錯誤信息時,應該從錯誤信息表中刪除相應數據
sp_dropMessage 50001

l第五步:錯誤提示信息國際化
用相應語言替換master..sysmessages表中用戶自定義的錯誤消息即可。

------------------------------------------

5. SQL命令是什麼意思呀 本人菜鳥,請高手盡量說通俗點,謝謝!

結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的結構化查詢語言語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。

6. sql是什麼

SQL是英文Structured Query Language的縮寫形式,它的意思是表示結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯系。此外,SQL是被當成為關系型資料庫管理系統的標准語言。其是由Microsoft開發和推廣的關系資料庫管理系統。

(6)5sql是指什麼擴展閱讀:

SQL Server的特點如下:

1、具有真正的客戶機和伺服器體系結構。

2、圖形化用戶界面,使系統管理和資料庫管理更加直觀。

3、豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。

4、其完全集成,利用了NT的許多功能,如發送和接受消息等。

7. SQl指的是什麼

SQL全稱是「結構化查詢語言(Structured
Query
Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM
R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle
,Sybase,Informix,SQL
server這些大型的資料庫管理系統,還是像Visual
Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。

8. 結構化查詢語言SQL分為哪5類

SQL可分為5類:

l 查詢語句

用於檢索資料庫表中存儲的行。可以使用SQL的SELECT語句編寫查詢語句。

l 數據操縱語言(Data Manipulation Language, DML)語句

用於修改表的內容。DML語句有三種,分別為Insert,Update,Delete。

l 數據定義語言(Data Definition Language, DLL)語句

用於定義構成資料庫的數據結構,例如表。DLL語句有5種基本類型:分別為

Create 創建資料庫結構。

Alter 修改資料庫結構。

Drop 刪除資料庫結構。

Rename 更改表名。

Truncate 刪除表的全部內容。

l 事務控制語句(Transaction Control, TC)語句

用於將對行所作的修改永久性的存儲到表中,或者取消這些修改操作。TC語句共有3種:

Commit 永久性的保存對行所作的修改。

Rollback 取消對行所作的修改。

SavePoint 設置一個「保存點」,可以將對行所作的修改回滾到此處。

l 數據控制語言(Data Control Language, DCL)語句

用於修改資料庫結構的操作許可權。DCL語句有兩種:

Grant 授予其他用戶對資料庫結構(例如表)的訪問許可權。

REVOKE 防治其他用戶訪問資料庫結構(例如表)。

(註:使用SQL*PLUS調用.sql文件的方法為,@C:\SQL\store_schema.sql)

9. 5,SQL裡面的排序語句desc和ASC有什麼區別

desc是倒序,asc是正序

比如

select*fromtableorderbyidasc

這樣就是從id由小到大的順序排列,如果是desc則是由大到小排列了,另外,如果最後不寫asc,一般的資料庫都默認為由小到大。

熱點內容
網路設置里沒有伺服器是什麼 發布:2025-01-18 09:52:19 瀏覽:343
阿里雲esc伺服器系統 發布:2025-01-18 09:49:16 瀏覽:790
你們家的無線網密碼是多少 發布:2025-01-18 09:47:50 瀏覽:730
renderscriptandroid 發布:2025-01-18 09:32:18 瀏覽:993
安卓手機如何拍游戲素材 發布:2025-01-18 09:30:59 瀏覽:348
廣州日立壓縮機有限公司 發布:2025-01-18 09:15:08 瀏覽:624
伺服器兩條寬頻如何疊加網速 發布:2025-01-18 08:52:17 瀏覽:731
oracle存儲過程集合 發布:2025-01-18 08:42:39 瀏覽:885
洋蔥數學緩存 發布:2025-01-18 08:38:36 瀏覽:919
電影的文件夾都是 發布:2025-01-18 08:21:49 瀏覽:835