当前位置:首页 » 编程语言 » 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,一般的数据库都默认为由小到大。

热点内容
renderscriptandroid 发布:2025-01-18 09:32:18 浏览:992
安卓手机如何拍游戏素材 发布:2025-01-18 09:30:59 浏览:347
广州日立压缩机有限公司 发布:2025-01-18 09:15:08 浏览:623
服务器两条宽带如何叠加网速 发布:2025-01-18 08:52:17 浏览:730
oracle存储过程集合 发布:2025-01-18 08:42:39 浏览:884
洋葱数学缓存 发布:2025-01-18 08:38:36 浏览:918
电影的文件夹都是 发布:2025-01-18 08:21:49 浏览:835
post提交php 发布:2025-01-18 08:21:42 浏览:460
如何禁止写入文件夹 发布:2025-01-18 08:21:04 浏览:363
360云盘等待上传 发布:2025-01-18 08:21:03 浏览:796