SQL_用户自定义的数据类型、规则、默认

SQL_用户自定义的数据类型、规则、默认
SQL_用户自定义的数据类型、规则、默认

用户自定义的数据类型、默认值、规则

一、用户自定义的数据类型

用户自定义数据类型可看做是系统数据类型的别名。

在多表操作的情况下,当多个表中的列要存储相同类型的数据时,往往要确保这些列具有完全相同的数据类型、长度和为空性(数据类型是否允许为空)。例如,对于student数据库中表student、grade和course三张表的xh,kh两个列必须具有相同的数据类型。

创建用户自定义数据类型时首先应考虑如下三个属性:

(1)数据类型名称

(2)新数据类型所依据的系统数据类型(又称为基类型)

(3)为空性

如果为空性未明确定义,系统将依据数据库或连接的ANSI NULL 默认设置进行指派。

1、创建用户自定义数据类型的方法如下:

(1)利用企业管理器定义

(2)利用SQL命令定义数据类型

在SQL Server中,通过系统存储过程实现用户数据类型的定义。

语法格式如下:

sp_addtype [@typename=] type, /*自定义类型名称*/

[@phystype=] system_data_type /*基类型*/

[,[@nulltype=] null_type /*为空性*/

[,[@owner=] owner_name] /*创建者或所有者*/ 其中:

type:用户自定义数据类型的名称。

System_data_type:用户自定义数据类型所依据的基类型。如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。 null_type:指明用户自定义数据类型处理空值的方式。取值可为’NULL’、’NOT NULL’、’NONULL’三者之一(注意:必须用单引号引起来)。如果没有用sp_addtype显式定义null_type,则将其设置为当前默认值,系统默认值一般为’NULL’。

例:定义学号字段的数据类型

sp_addtype ’student_xh’,’char(4)’,’not null’

2、删除用户自定义数据类型

(1)利用企业管理器

(2)利用SQL语句

语法格式如下:

sp_droptype [@typename=] type

其中type为用户自定义数据类型的名称,应用单引号括起来。

例:删除student_xh用户自定义数据类型

sp_droptype ’student_xh’

说明:

(1)如果在表定义内使用某个用户定义的数据类型,或者将

某个规则或默认值绑定到这种数据类型,则不能删除该类型。

(2)要删除一用户自定义类型,该数据类型必须存在,否则返回一条错误信息。

3、执行权限

执行权限默认授予sysadmin固定服务器角色、db_ddladmin和db_owner固定数据库角色成员以及数据类型所有者。

4、利用自定义数据类型定义字段

用户自定义数据类型与基类型一样使用,可定义为字段的数据类型。

二、默认值对象的定义、使用与删除

默认值对象的定义、使用与删除既可利用企业管理器实现,也可利用SQL语句实现。

1、通过企业管理器定义和绑定DEFAULT默认值对象

2、通过SQL语句定义和绑定DEFAULT默认值对象

(1)通过SQL语句定义DEFAULT默认值对象

命令格式如下:

CREATE DEFAULT 默认值名称 AS 常量表达式

常量表达式可以含有常量、内置函数、字符和日期常量用单引号引起来;货币、整数和浮点常量不需要使用引号。十六进制数据必须以0x开头,货币数据必须以美元符号($)开头。默认值对象必须

与列数据类型兼容。

例:定义学分默认值

CREATE DEFAULT COURSE_XF AS 0

(2)通过系统存储过程绑定DEFAULT默认值对象

创建默认值对象后,要使其作用,应使用sp_bindefault存储过程将其绑定到列或用户自定义数据类型。

语法格式如下:

sp_bindefault [@defname=]’默认值对象名’,

[@objname=]’被绑定对象的名称’

[,[@futureonly=]’futureonly_flag’]

其中参数futureonly_flag仅在将默认值对象绑定到用户定义数据类型时才使用,当futureonly_flag的值为futureonly时,表示在此之前该数据类型关联的列不继承该默认值对象的值。

例:

sp_bindefault ‘cousr_xf’,’course.xf’

3、删除默认值对象

如果要删除一个默认值对象,首先应解除默认值对象与用户定义类型及表字段的绑定关系,然后才能删除该默认值对象。

(1)利用sp_unbindefault解除绑定关系

语法格式如下:

sp_unbindefault [@objname=]’被绑定对象名’

[,[@futureonly=]’futureonly_flag’]

(2)删除默认值对象

解除默认值对象与用户定义类型及表字段的绑定关系后,即可用DROP语句删除默认值对象。

语法格式如下:

DROP DEFAULT 默认值对象名

三、规则对象的定义、使用与删除

规则对象的使用方法与默认值对象的使用步骤类似:

(1)定义规则对象

(2)将规则对象绑定到列或用户自定义类型

规则对象的定义可利用企业管理器定义,也可利用SQL语句定义。

1、利用企业管理器定义规则对象并绑定到自定义类型或列

2、利用SQL语句定义规则对象并绑定到自定义类型或列

(1)定义规则对象,语法格式如下:

CREATE RULE 规则名 AS 条件表达式

其中:条件表达式不能包含列或其他数据库对象,可以包含不引用数据库对象的内置函数,在条件表达中包含一个局部变量,局部变量的前面都有一个@符号,使用UPDATE或INSERT语句修改或插入值时,该表达式用于对规则关联的列值进行约束,创建规则时,局部

变量代表了UPDATE或INSERT语句输入的值。

另外有如下几点说明:

(1)创建的规则对先前已存在于数据库中的数据无效。

(2)单个批处理中,CREATE RULE语句不能与其他T-SQL语句组合使用。

(3)规则表达式的类型必须与列的数据类型兼容,不能将规则绑定到text、image、或timestamp列。要用单引号将字符和日期常量引起来,在十六进制常量前加0x。

(4)对于用户定义数据类型,当在该类型的数据列中插入值,或更新该类型的数据列时,绑定到该类型的规则才会激活。规则不检查变量,所以在向用户定义数据类型的变量赋值时,不能与列绑定的规则冲突。

(5)如果列同时有默认值和规则与之关联,则默认值必须满足规则的定义,与规则冲突的默认值不能插入到列。

3、将规则对象绑定到自定义类型或列

语法格式如下:

sp_bindrule [@rulename=] ‘规则对象名’

[@objname=]’被绑定的对象名’

[,[@futureonly=] ’futureonly_flag’]

其中:“被绑定对象名”为绑定到规则的列或用户定义数据类型,如果采用“表.字段名”格式,则认为绑定到表的列,否则绑定到用户定义数据类型;参数futureonly_flag仅当将规则绑定到用户定义

数据类型时才使用,如果futureonly_flag设置为futureonly,用户定义数据类型的现有列不继承新规则。如果futureonly_flag为NULL,当被绑定的数据类型当前无规则时,新规则将绑定到用户定义数据类型的每一列。

例:创建课程的规则,并绑定到KH字段。

CREATE RULE KH_RULE AS @range like ’K[0-9[0-9]’Sp_bindrule ‘kh_rule’,’course.kh’

例:创建“课程号”用户定义数据类型,并规则kh_rule绑定到用户定义类型上。

Sp_addtype ‘course_kh’,’char(3)’,’not null’

Sp_bindrule ‘kh_rule’,’course_kh’

4、规则对象的删除

删除规则对象前,首先应使用系统存储过程sp_unbindrule解除被绑定对象与规则对象之间的绑定关系。格式如下:

sp_unbindrule [@objname=] ‘被绑定对象名’

[,[@futureonly=] ’futureonly_flag’]

其中:参数futureonly_flag仅用于解除用户定义数据类型规则的绑定,如果futureonly_flag设置为futureonly,规则仍然对现有的属于该数据类型的列有效。

在解除列或自定义数据类型与规则对象之间的绑定关系后,就可以删除规则对象了。

删除规则对象的SQL语句的语法格式如下:

DROP RULE 规则对象名

例:解除课程号列与kh_rule之间的绑定关系,并删除规则对象kh_rule。

USE STUDENT

IF EXISTS(SELECT NAME FROM sysobjects

WHERE name=’kh_rule’AND type=’R’)

BEGIN

EXEC sp_u nbindrule ‘course.kh’

DROP RULE kh_rule

END

GO

C题库--自定义数据类型(精)

本题序号:118 当定义一个结构体变量时,系统分配给它的内存大小的理论值是__________。 A 各成员所需内存的总和 B 结构体中的第一个成员所需内存 C 成员中所需内存最大者的存储空间 D 结构体中的最后一个成员所需存储容量参考答案 A 本题序号:165 存放多个字符串,用________比较适合。 A 二维字符数组 B 一维字符数组 C 自定义结构体 D 自定义联合体 参考答案 A 本题序号:169 定义生成非静态变量时,将对变量进行_______。 A 自动赋初值 B 自动赋0 C 不会自动赋初值 D 自动赋-1 参考答案 C 本题序号:180 x为int型,s为float型,x=3,s=2.5。表达式s+x/2的值为________。 A 4 B 3.5 C 2.5 D 3 参考答案 B 本题序号:182 x、y为整数,x=15,y=-2。表达式x>10 and y<2 or x*y==10 and x的值为_________。 A 0 B 15 C 1 D 2 参考答案 C 本题序号:211 以下定义, struct st1{int a,b;float x,y;}; struct st2{int a,b;st1 s1; } ss; 对成员变量x的引用形式正确的是:_________ 。 A ss.s1.x B st2.st1.x C st2.s1.x D ss.x 参考答案 A 本题序号:215 对任意整型数据数据m,n(m>n>0), 则 C 语言表达式m-m/n*n的值为:_______________。 A 0 B m%n C 1 D n%m 参考答案 B 本题序号:223 设有以下定义: enum t1 {a1,a2=7,a3,a4=15} time; 则枚举常量a1和a3的值分别是 A 1和2 B 6和3 C 1和8 D 0和8 参考答案 D 本题序号:225 设有类型说明:enum color{red,yellow=3,white,black}; 则执行语句cout<

sql server 2008 数据类型

SQL Server 2008数据类型(1) SQL Server 2008数据类型(1) 在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。 1.CREATE TYPE Address 2.FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。 如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。 1.ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70 ) 说明: 在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。 您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。 1.SELECT https://www.360docs.net/doc/2418637490.html, AS ObjectName, 2. https://www.360docs.net/doc/2418637490.html, AS ColumnName, 3.TYPE_NAME(https://www.360docs.net/doc/2418637490.html,er_type_id) as DataType 4.FROM sys.objects o JOIN sys.columns c 5.ON o.object_id = c.object_id

AB PLC编程软件RSLOGIX5000入门7——UDT用户自定义大数据类型

AB PLC编程软件RSLOGIX5000入门7——UDT用户自定义数据类型 在本章中,我们将介绍如何通过用户自定义数据类型和数据围划定来规划标签数据库。 这里将学到 § 了解使用 UDT 的优势 § 学习如何优化 UDT 规划 § 使用数据围划定帮助简化并加快开发工作 我们现在将重点关注 Logix 控制器中的数据规划。 打开现有控制器文件 1. 在计算机桌面上,双击 Lab Files 文件夹。 2. 双击名为 Conveyor_Program_S 3.ACD 的现有项目。 这样将在 RSLogix 5000 中启动该项目。 为传送带创建用户自定义数据类型 您已重新组织了程序规划以更好地利用 Logix,现在已准备好开始对数据规划进行重新组织。可注意到,工程师规划数据的方式仍像使用带有整数、实数和定时器数据表的传统 PLC 一样。问题是,当与设备关联的数据分布到控制器存中的各处时便很难进行跟踪。您已再次决定充分利用 Logix,使用用户自定义数据类型。 用户自定义数据类型 用户自定义数据类型也称为 UDT 或结构,借此按逻辑方式对数据进行组织或分组,以便所有与设备关联的数据都可组合在一起。 例如,每个传送带都有 8 个整数值、3 个实数值、2 个定时器和 11 个与其关联的布尔值。在传统PLC 中,可能需要 4 个不同的数据表。然后,当您具有多条传送带时,您可能需要详细地将传送带映射到各个数据表中。这样就会变得很难管理。 通过 UDT 能够实现的是将不同的数据类型(整数、实数、定时器、布尔等)组合到一起,共同作为用户自定义数据类型。然后便可创建该 UDT 类型的数组。这可使得编程工作、代码的记录和数据的跟踪都更加轻松。 1. 在控制器项目管理器中,双击"控制器标签"(Controller Tags)。

VISUAL BASIC数据类型的定义

一、数据类型概述 数据:计算机能够处理数值、文字、声音、图形、图像等信息,均称为数据。 数据类型:根据数据描述信息的含义,将数据分为不同的种类,对数据种类的区分规定,称为数据类型。数据类型的不同,则在内存中的存储结构也不同,占用空间也不同 VB的基本数据类型: 数值型数据(主要数据类型)日期型字节型 货币型逻辑型字符串型对象型变体型 二、数值数据类型 数值类型分为整数型和实数型两大类。 1、整数型 整数型是指不带小数点和指数符号的数。 按表示范围整数型分为:整型、长整型 (1)整型(Integer,类型符%) 整型数在内存中占两个字节(16位) 十进制整型数的取值范围:-32768~+32767 例如:15,-345,654%都是整数型。而45678%则会发生溢出错误。 (2)长整型(Long,类型符&) 长整数型在内存中占4个字节(32位)。 十进制长整型数的取值范围: -2147483648~+2147483647 例如:123456,45678&都是长整数型。 2、实数型(浮点数或实型数) 实数型数据是指带有小数部分的数。 注意:数12和数12.0对计算机来说是不同的,前者是整数(占2个字节),后者是浮点数(占4个字节) 实数型数据分为浮点数和定点数。 浮点数由三部分组成:符号,指数和尾数。 在VB中浮点数分为两种: 单精度浮点数(Single) 双精度浮点数(Double) (1)单精度数(Single,类型符!) 在内存中占4个字节(32位),,有效数字:7位十进制数 取值范围:负数-3.402823E+38~-1.401298E-45 正数 1.401298E-45~3.402823E+38 在计算机程序里面不能有上标下标的写法,所以乘幂采用的是一种称为科学计数法的表达方法 这里用E或者e表示10的次方(E/e大小写都可以) 比如:1.401298E-45表示1.401298的10的负45次方

用户定义数据类型与自定义函数

数据库系统原理实验报告 实验名称:__用户定义数据类型与自定义函数_ 指导教师:_叶晓鸣刘国芳_____ 专业:_计算机科学与技术_ 班级:__2010级计科班_ 姓名:_文科_____学号: 100510107 完成日期:_2012年11月10日_成绩: ___ ___一、实验目的: (1)学习和掌握用户定义数据类型的概念、创建及使用方法。 (2)学习和掌握用户定义函数的概念、创建及使用方法。 二、实验内容及要求: 实验 11.1 创建和使用用户自定义数据类型 内容: (1)用SQL语句创建一个用户定义的数据类型Idnum。 (2)交互式创建一个用户定义的数据类型Nameperson。 要求: (1)掌握创建用户定义数据类型的方法。 (2)掌握用户定义数据类型的使用。 实验 11.2 删除用户定义数据类型 内容: (1)使用系统存储过程删除用户定义的数据类型Namperson。 (2)交互式删除用户定义的数据类型Idnum。 要求: (1)掌握使用系统存储过程删除用户定义的数据类型。 (2)掌握交互式删除用户定义的数据类型。 实验 11.3 创建和使用用户自定义的函数 内容: (1)创建一个标量函数Score_FUN,根据学生姓名和课程名查询成绩。 (2)创建一个内嵌表值函数S_Score_FUN,根据学生姓名查询该生所有选课的成绩。 (3)创建一个多语句表值函数ALL_Score_FUN,根据课程名查询所有选择该课程学生的成绩信息。

要求: (1)掌握创建标量值函数的方法。 (2)掌握创建内嵌表值函数的方法。 (3)掌握创建多语句表值函数的方法。 实验 11.4 修改用户定义的函数 内容: (1)交互式修改函数Score_FUN,将成绩转换为等级输出。 (2)用SQL修改函数S_Score_FUN,要求增加一输出列定义的成绩的等级。要求: (1)掌握交互式修改用户定义函数的方法。 (2)掌握使用SQL修改用户定义函数的方法。 实验 11.5 输出用户定义的函数 内容: (1)交互式删除函数Score_FUN。 (2)用SQL删除函数S_Score_FUN。 要求: (1)掌握交互式删除用户定义函数的方法。 (2)掌握使用SQL删除用户定义函数的方法。

基于自定义函数的Function

基于自定义函数的Function-Based索引创建 发表日期:2008-2-9 新浪微博QQ空间QQ微博百度搜藏腾讯朋友QQ收藏百度空间人人网开心网 - 留言版上的第2330号问题是: 在oralce中给自建函数创建索引,结果不成功。source:Create Index IDX_T_SP_TWOTYPESTA T_0_f On T_SP_TWOTYPESTA T_0(f_dateadd(yearmonth,12,2)); err:the function is not deterministic. 我们看一下这是为什么? 随便一个测试可以再现这个问题,我门创建一个函数(本范例函数用于进行16进制向10进制转换): CREA TE OR REPLACE FUNCTION h2ten ( p_str IN V ARCHAR2, p_from_base IN NUMBER DEFAULT 16 ) RETURN NUMBER IS l_num NUMBER DEFAULT 0; l_hex V ARCHAR2 (16) DEFAULT '0123456789ABCDEF'; BEGIN FOR i IN 1 .. LENGTH (p_str) LOOP l_num := l_num * p_from_base + INSTR (l_hex, UPPER (SUBSTR (p_str, i, 1))) - 1; END LOOP; RETURN l_num; END h2ten; 此时创建索引,获得如下错误信息: SQL> create table t as select username,'a' hex from dba_users; Table created SQL> create index i_t on t (h2ten(hex)); create index i_t on t (h2ten(hex)) ORA-30553: The function is not deterministic

自定义数据类型习题及答案(C语言)

第7章自定义数据类型习题 一.选择题: 1.当定义一个结构体变量时,系统分配给它的内存空间是【】。 A) 结构中一个成员所需的内存量B) 结构中最后一个成员所需的内存量 C) 结构体中占内存量最大者所需的容量D) 结构体中各成员所需内存量的总和2.若有以下说明,对初值中整数2的正确引用方式是【】。 static struct { char ch; int i; double x; } a[2][3]={{…a?,1,3 .45,?b?,2,7.98,?c?,3,1.93I} {…d?,4,4.73,?e?,5,6.78,?f?,6,8.79 }}; A) a[1][1].i B) a[0][1].i C) a[0][0].i D) a[0][2].i 3.根据以下定义,能打印字母M的语句是【】。 struct p { char name[9]; int age; }c[10]={“Jobn”,17,”Paul”,19,”Mary”,18,”Adam”,16}; A) printf(“%c”,c[3].name);B) printf(“%c”,c[3].name[1]); C) printf(“%c”,c[2].name);D) printf(“%c”,c[2].name[0]); 4.以下说明和语句中,已知int型数据占两个字节,则以下语句的输出结果是【】。 struct st { char a[l0]; int b; double c; }; printf(“%d”,sizeof(struct st)); A) 0 B) 8 C) 20 D) 2 5.以下说明和语句中,对结构体变量std中成员id的引用方式不正确的是【】。 struct work { int id; int name; } std, *p; p=&std; A) std.id B) *p.id C) (*p).id D) &std.id 6.如设有如下定义,若要使px指向rec中的成员x,正确的赋值语句是【】。 struct aa

vb用户自定义的数据类型

用户自定义的数据类型------记录 保存多个相同或不同类型数值的结构称为记录(record)。 在VISUAL BASIC 中定义记录,用Type语句,其语法如下: Type varType Variable1 As varType Variable2 As varType … Variablen As varType End Type 例如定义一个名为CheckRecord的记录: Type CheckRecord CheckNumber as Integer CheckDate as Date CheckAmount as Single End Type CheckRecord结构可以像普通变量类型一样使用。要定义这个类型的变量,使用如下语句: Dim check1 As CheckRecord 要对结构的各个字段访问,可使用如下语句: check1. CheckNumber=123 check1. CheckDate=#08/14/1996# check1. CheckAmount=240.00 例: 简单例(自定义类型1.frm) 数组自定义类型1.FRM 用一维数组存放学生年龄。并可通过学生姓名输入或显示该学生的年龄。 Private Type StudentInformation StudentAge As Integer StudentName As String End Type Dim N As Boolean Dim Information(1 To 4) As StudentInformation Dim infIndex As Integer Dim stuName As String Private Sub cmdInputname_Click() For i = 1 To 4 Information(i).StudentName = InputBox("PL input name") Next i End Sub Private Sub cmdInput_Click() infIndex = 1 N = False

C语言自定义数据类型

自定义数据类型 结构体 结构体是程序员在程序中自定义的一种数据类型,在说明和使用之前必须先定义它,也就是构造它。定义一个结构体的语法格式如下: Struct 结构体类型名 { 成员1的数据类型名成员1名称; 成员2的数据类型名成员2名称; . . 成员n的数据类型名成员n名称; }结构体变量表={成员初始化}; 注意成员可以由若干个不同的数据类型组成,每个成员也可以是结构体,即可以嵌套定义。 例如: Struct student { Long num; Char name; Char sex; Float score; }; 已经定义的某种结构体类型可以视为一种标准的数据类型,它的使用方法与标准数据类型使用方法相同,可以用来定义变量、数组、指针。 结构体变量说明 结构体变量的说明在程序的变量说明部分给出,一般在结构定义之后,它的语法格式如下: Struct 结构类型名结构变量名表; 例如: Struct student stu; 指出了结构变量stu是student类型的变量,它由四个成员组成,每个成员的数据类型和名字都与student结构定义中给出的相同。系统完全按照结构定义时制定的内存模式为结构变量分配内存空间。 可以在定义结构体类型的同时给出结构体变量。 Struct student { Long num; Cha name[20]; Cha sex; Float score; }stu1,stu2; 这种形式与前面给出的结构定义和结构说明分开处理效果相同。

结构体成员访问 结构体成员是通过结构体变量名和成员名进行访问的,不能把他作为一个整体进行访问。其访问格式如下: 结构体变量名.成员名 其中运算符.是成员访问运算符,其运算级别是最高的,和圆括号运算符()、下标运算符[]是同一级别的。如果结构体成员是指针变量,则访问格式为: *https://www.360docs.net/doc/2418637490.html, 如果某个结构体变量的成员数据类型又是一个结构体,则访问方式为: 外层结构体变量名.外层成员名.内层成员名 可以在定义结构体变量的同时对结构体变量初始化。 {结构体成员}结构体变量={初始数据}; struct student { long num; char name[20]; char sex; float score; } stu1={200401L,"ZhangHong",'f',92.5f}; 对于嵌套的结构体类型数据,访问格式为: 结构体变量名1.结构体变量名2.成员名 结构体变量初始化的格式如下: struct 结构体名 {结构体成员}结构体变量={初始数据}; 初始数据类型必须与结构成员的数据类型相匹配,并且先后顺序一一对应赋值。 要对结构体变量的成员地址进行访问,其语法格式为: &结构体变量.成员名 当一个指针变量用来指向一个结构变量时,称为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。 结构体指针变量: Struct 结构名*结构体指针变量名 Struct student *pstu; 必须先赋值后使用,把结构体变量的首地址赋给指针变量,不能把结构名或结构体变量名赋给指针变量。 pstu=&stu1; 结构体名和结构体变量是两个不同的概念,结构体名只能表示一个结构形式,编译系统并不对它分配内存空间,只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。这是因为结构体变量被定义后相当于标准数据类型被使用。 利用结构体指针变量访问成员如下: (*结构体指针变量).成员名 或者: 结构体指针变量->成员名 后一种形式较为方便,容易区分。

SQLServer的数据类型

SQLServer的数据类型 第一大类:整数数据 bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte. int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1. smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1 tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1 第二大类:精确数值数据 numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化. decimal:和numeric差不多 第三大类:近似浮点数值数据 float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308. real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38 第四大类:日期时间数据 datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节. smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节. 第五大类:字符串数据 char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上. varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉. text:长宽也是设定的,最长可以存放2G的数据. 第六大类:Unincode字符串数据 nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节. nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节. ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.

sql自定义函数

SQL Server 2005 自定义函数语汇小结 由于工作的需要,了解下SQL Server 2005 函数的写法,现在总结一下: 对于SQL Server 2005 数据库而言,函数与存储过程在语法方面是有很大的相同点, 最大的不同就是函数有返回值,直接使用returns ,而存储过程则使用output来声明输出变量 一、下面先说明下,如何创建函数 1、创建没有返回值与没有参数的函数 CREATE FUNCTION my_function() AS BEGIN DECLARE @variable varchar(255) --声明字符型变量 DECLARE @variable int --声明整形型变量 ...(do something) SET @variable = '12345' --对变量variable赋值 END 2、创建没有返回值有参数的函数 CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6)) AS BEGIN DECLARE @variable_1 varchar(255) --声明字符型变量 ...(do something) SET @variable_1 = @user_Name + convert(varchar(255),@password) --将变量@user_Name与@password连接赋给@variable_1,其中convert()函数是将int型转为varchar型 END 3、创建有返回值与有参数的函数 CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6)) returns varchar(255)--设置返回值,记住是returns 而不是return AS BEGIN DECLARE @result varchar(5) DECLARE @fagle varchar(5) SET @result = select https://www.360docs.net/doc/2418637490.html,er_Name from USERS as users where https://www.360docs.net/doc/2418637490.html,er_Name = @user_Name and users.password = @password IF @result = '' BEGIN SET @fagle = 'NO' END ELSE BEGIN SET @falge = 'YES' END return @result --返回结果 END 二、删除一个函数语法

SQL数据库字段类型说明

SQL数据库字段类型说明

1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 后面三种数据类型和前面的相比,从名称上看只是多了个字母n,它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar 最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 (2)datetime和smalldatetime datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。 smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。 (3)bitint、int、smallint、tinyint和bit bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。 int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。 tinyint:从0到255的整数数据。 bit:1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p 之间的值,默认小数位数是0。 (5)float和real float:从-1.79^308到1.79^308之间的浮点数字数据。 real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real 的同义词为float(24)。

sql数据类型转换

sql数据类型转换(cast() and convent())函数) sql数据类型转换(cast() and convent())函数) 当Microsoft? SQL Server? 2000 不自动执行不同数据类型的表达式转换时,可使用转换函数 CAST 和 CONVERT 进行转换。这些转换函数还可用来获得各种特殊的数据格式。这两个转换函数都可用于选择列表、WHERE 子句和允许使用表达式的任何地方。 如果希望 Transact-SQL 程序代码遵从 SQL-92 标准,请使用 CAST 而不要使用CONVERT。如果要利用 CONVERT 中的样式功能,请使用 CONVERT 而不要使用CAST。 使用 CAST 或 CONVERT 时,需要两条信息: ?要转换的表达式(例如,销售报告要求销售数据从货币型数据转换为字符型数据)。 ?要将所给表达式转换到的数据类型,例如,varchar或 SQL Server 提供的任何其它数据类型。 除非将被转换的值存储起来,否则转换仅在 CAST 或 CONVERT 函数的作用期内有效。 在下面的示例中,第一个 SELECT 语句中使用 CAST,第二个 SELECT 语句中使用 CONVERT,将title列转换为char(50)列,以使结果更可读: USE pubs SELECT CAST(title AS char(50)), ytd_sales FROM titles WHERE type = 'trad_cook' 或 USE pubs SELECT CONVERT(char(50), title), ytd_sales FROM titles WHERE type = 'trad_cook' 下面是结果集:(对任何一个查询) ytd_sales ----------------------------------------- -----------

sql自定义数据类型

6.2 用户自定义数据类型 6.2.1 创建用户自定义数据类型 可以使用T-SQL语句或企业管理器来完成用户自定义数据类型的创建。 1. 使用T-SQL语句 可以使用系统存储过程sp_addtype来创建用户自定义数据类型。语法是:sp_addtype type_name[,system_type] {'NULL'|'NOT NULL'|'NONULL'}-默认为'NULL' 其中: type_name为用户定义数据类型名,这个名称在数据库中必须是惟一的。 system_type 为用户定义的数据类型所基于的系统数据类型,可以包括数据的长度、精度等。当系统数据类型中包括标点符号(例如括号、逗号)时,应用引号括起来。 例如,创建一个“号码”数据类型可使用如下代码: USE 学生图书借阅管理 EXEC sp_addtype 号码,'varchar(8)','NULL' 在查询分析器中执行上述语句,结果窗口显示如下信息: (所影响的行数为1行) 类型已添加。 2. 使用企业管理器 使用企业管理器创建用户自定义数据类型的操作步骤如下: (1)在企业管理器中展开要创建用户自定义数据类型的数据库,用鼠标右键单击“用户定义的数据类型”目录,在弹出的快捷菜单中选择“新建用户定义数据类型”命令,如图6-14所示。 图6-14 新建用户自定义数据类型 (2)打开的用户自定义数据类型属性对话框如图6-15所示。在图6-15所示对话框的名

称文本框中输入用户自定义数据类型的名称,如“号码”。 图6-15 用户自定义数据类型属性对话框 图6-16 创建用户自定义数据类型“号码” (3)在图6-15所示对话框的“数据类型”下拉列表框中,选择该用户自定义数据类型所基于的系统数据类型,如varchar。 (4)如果选择的基类型是可以设定长度的(如varchar、char等),则还需要在长度文本框中设定数据类型的长度。 (5)如果允许空值,则选中“允许NULL值”复选框。 (6)如果希望该数据类型与规则或默认值捆绑,则分别在“规则”和“默认值”下拉列表框中选择要绑定的规则和默认值,否则选择“无”,如图6-16所示。规则和默认值将在 6.3节和6.4节中介绍。 (7)单击“确定”按钮,关闭对话框。 6.2.2 查看用户自定义数据类型 要查看用户自定义数据类型,可以使用sp_help 系统存储过程来查看用户自定义数据

T-SQL中的数据类型(较全)

T-SQL中的数据类型 主要学习T-SQL的数据类型:数值型数据类型,字符型数据类型,临时数据类型,混合型数据类型,附带有VARDECIMAL的DECIMAL存储类型。 1、数值数据类型 2、字符型数据类型 字符型数据类型用两种普通形式。它们可以是单字节的字符串,还可以使Unicode字符串。此外,字符串有固定或可变长度。具体看下表:

注:VARCHAR数据类型和CHAR数据类型基本一样,只有一点不同,如果一个CHAR(n)字符串比n个字符要短,那么其余的字符串就会用空格来填充。VARCHAR数据类型经常用数据长度存储。 3、临时数据类型 T-SQL支持的临时数据类型有:DATETIME、SMALLDATETIME、DATE、TIME、DATETIME2和DETETINEOFFSET。 DATETIME和SMALLDATETIME数据类型指定日期和时间,每个值都为整数并分别用4个字节或2个字节保存。DATETIME和SMALLDATETIME的值是作为两个单独的数值保存的。DATETIME日期值的范围为01/01/1900至12/31/9999。SMALLDATETIME相应的值为01/01/1900至06/06/2079。时间部分能够再用4个字节或2个字节保存。它表示午夜过后的一秒的三百分之一(DATETIME)或分钟(SMALLDATETIME)。 如果只想保存日期或时间部分,那么使用DATETIME和SMALLDATETIME非常不方便。SQL SERVER 2008新增新的数据类型:DATE和TIME,这两种数据类型只能分别保存DATATIME数据的DATA或TIME部分。DATE数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999。TIME数据类型用3-5个字节保存,且精确到100ns。 DATETIME2数据类型也是一种新的数据类型,用于保存精度度很高的日期和时间数据。这种数据类型能够根据要求定义可变长度。存储大小为6-8个字节。时间部分的精确度为100ns。 4、混合型数据类型 T-SQL的混合数据类型有:Binary,BIT,大对象数据类型,CURSOR,UNIQUEIDENTIFIER,SQL_VARTANT,TABLE,XML,Spatial,HIERARCHYID,TIMESTAMP和自定义数据类型。 4.1 BINARY和BIT BINARY和VARBINARY数据类型是两种二进制的数据类型。它们表示系统内部格式的数据对象。它们用来存储位串,因此这些值都是十六进制的数字。 4.2 大对象数据类型 大对象就是最大长度为2GB的数据对象。这些数据对象一般用来存储大型的文本数据、加载模块和音频/视频文件。T-SQL支持两种不同的指定和访问方式:使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)的数据类型;使用所谓的文本和图像数据类型。 TEXT、NTEXT和IMAGE数据类型组成了所谓的文本/图像数据类型。IMAGE类型的数据对象包含所有的数据(下载模块、音频/视频),而TEXT和NTEXT数据类型的数据对象包含文本数据。

SQL_用户自定义的数据类型、规则、默认

用户自定义的数据类型、默认值、规则 一、用户自定义的数据类型 用户自定义数据类型可看做是系统数据类型的别名。 在多表操作的情况下,当多个表中的列要存储相同类型的数据时,往往要确保这些列具有完全相同的数据类型、长度和为空性(数据类型是否允许为空)。例如,对于student数据库中表student、grade和course三张表的xh,kh两个列必须具有相同的数据类型。 创建用户自定义数据类型时首先应考虑如下三个属性: (1)数据类型名称 (2)新数据类型所依据的系统数据类型(又称为基类型) (3)为空性 如果为空性未明确定义,系统将依据数据库或连接的ANSI NULL 默认设置进行指派。 1、创建用户自定义数据类型的方法如下: (1)利用企业管理器定义 (2)利用SQL命令定义数据类型 在SQL Server中,通过系统存储过程实现用户数据类型的定义。 语法格式如下: sp_addtype [@typename=] type, /*自定义类型名称*/ [@phystype=] system_data_type /*基类型*/ [,[@nulltype=] null_type /*为空性*/

[,[@owner=] owner_name] /*创建者或所有者*/ 其中: type:用户自定义数据类型的名称。 System_data_type:用户自定义数据类型所依据的基类型。如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。 null_type:指明用户自定义数据类型处理空值的方式。取值可为’NULL’、’NOT NULL’、’NONULL’三者之一(注意:必须用单引号引起来)。如果没有用sp_addtype显式定义null_type,则将其设置为当前默认值,系统默认值一般为’NULL’。 例:定义学号字段的数据类型 sp_addtype ’student_xh’,’char(4)’,’not null’ 2、删除用户自定义数据类型 (1)利用企业管理器 (2)利用SQL语句 语法格式如下: sp_droptype [@typename=] type 其中type为用户自定义数据类型的名称,应用单引号括起来。 例:删除student_xh用户自定义数据类型 sp_droptype ’student_xh’ 说明: (1)如果在表定义内使用某个用户定义的数据类型,或者将

SQLServer用户自定义函数详细介绍

SQL Server用户自定义函数 用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自定义函数分为三种类型: (1) 标量函数 标量函数返回一个确定类型的标量值,其返回值类型为除 TEXT 、 NTEXT 、IMAGE 、 CURSOR 、 TIMESTAMP 和 TABLE 类型外的其它数据类型。函数体语句定义 在 BEGIN-END 语句内。在 RETURNS 子句中定义返回值的数据类型,并且函数的最后一条语句必须为 Return 语句。创建标量函数的格式: Create Function 函数名(参数) Returns 返回值数据类型 [With {Encryption|Schemabinding}] [AS] BEGIN SQL 语句 ( 必须有 Return 子句 ) END 举例: ******************************************************************* CREATE FUNCTION dbo.Max ( @a int, @b int ) RETURNS int AS BEGIN DECLARE @max int IF @a>@b SET @max=@a ELSE SET @max=@b Return @max END *******************************************************************调用标量函数可以在 T-SQL 语句中允许使用标量表达式的任何位置调用返 回标量值(与标量表达式的数据类型相同)的任何函数。必须使用至少由两部分组成名称的函数来调用标量值函数,即架构名 . 对象名,如 dbo.Max(12,34) 。 (2) 内联表值函数 内联表值型函数以表的形式返回一个返回值,即它返回的是一个表。内联表 值型函数没有由 BEGIN-END 语句括起来的函数体。其返回的表是由一个位于RETURN 子句中的 SELECT 命令从数据库中筛选出来。内联表值型函数功能相当 于一个参数化的视图。

SQL数据库基本语法格式

基本语法格式 select(聚合函数)的语句格式:(这个不会考试就危险 了) select * from 表名 上面一句可以查出一张你指定表名的表里的全部东西,* 的位置可以替换其他的东西,比如:select 列 1 名, 列 2 名from 表名 这样你就可以只看表里列1,列2两列。还可以加COUNT(),YEAR(等函数,具体看 书吧!! 在后面可以接where,group by,order by 等 where 的用法: select * from 表名where 条件表达式 条件表达式就好比列 1 值>0 啊,列 2 值=0&0啊,之类的。这样我们就之看符合条件的。 group by 的用法: select 列名1,count(列名2) as ' 自定义列名' from 表名 group by 列名 1 这句就是把表里所有列名 1 相同的行集合成一行,顺便说下count(列名2) as ' 自定义列名' ,count()是总行数的意思,考试经常要和group by 一起用。如果要求总合用sum()这个函数。as '自定义列名’就是给列付个名字。如果要进一步筛选就在语句的最后加"HAVING 条件表达式"就可以了。 ORDER BY勺用法: select * from 表名[where 条件表达式] ORDER BY列名N 这样就是依照列名N的顺序排列了,最后加上DESC就是降序排列 连表查询 Select需要的列名1,需要的列名 2 ,……需要的列名N from 表1,表2 Where表1.某列=表2.某列and其他要求的条件表达式 以上就是连两个表的Select 语句, 你也可以连 3 或多个表,只要每个表和其他的表有联系就可以了。 如果上面的看不太懂我举个例子: 我们有2张表:B1,B2。B1里有“动画名称”和“时间”两列。B2里有“动画名称” 和“制作公司”两列。其中两个表的动画名称是对应的,现在要你显示出“动画名称”, “时间”和“制作公司” ,做法如下: SELECT B1. 动画名称, 时间, 制作公司from B1,B2 where B1. 动画名称= B2. 动画名称 ps: “SELECT B1. 动画名称, 时间, 制作公司”里面我要求返回3项,第一项因为两个表列名重复所以要前面加“表名. ” 如果上面的题目还要加条件,比如我们只要“制作公司”是“A”公司的,就这样写where 语句: where B1. 动画名称= B2. 动画名称AND 制作公司='A' update (更新)的语句格式: update 表名 set 列名 1 = xxx, 列名 2 = xx, ... 列名N = xx where 列名x =

相关文档
最新文档