SQL 数据库

SQL 数据库,第1张

1

create table xsqk

(

学号 char(6)  primary key,

姓名 char(8) not null unique,

性别 bit not null check(性别=0 or 性别=1),

出生日期 smalldatetime not null,

专业名 char(10) not null,

所在系 char(10) not null,

联系电话 char(11)check(len(联系电话)=8),

总学分 tinyint check(总学分>=0 and 总学分<=200),

备注 text

)

create table kc(

序号 int identity(1,1) ,

课程号 char(3) primary key,

课程名 char(20) not null,

授课教师 char(8),

开课学期 tinyint not null check(开课学期>=1 and 开课学期<=6),

学时 tinyint not null,

学分 tinyint

)

create table xs_kc(

学号 char(6) not null foreign key (学号) references xsqk (学号),

课程号 char(3) not null foreign key (课程号) references kc (课程号) ,

成绩 tinyint,

学分 tinyint,

primary key(学号,课程号)

)

insert into xsqk values('10001','张三',1,'1995-01-01','软件','计算机','12345678',150,'')

insert into kc(课程号,课程名,授课教师,开课学期,学时,学分) values('101','软件','李四',3,48,2)

insert into xs_kc values('10001','101',88,3)

2

select  into NOPASS from xs_kc where 成绩<60 

3

update xs_kc set 成绩= 成绩+10 where 课程号 = '103' and 成绩<60

4

select 学号,课程号,成绩 from xs_kc where 成绩>70

5

select   from xs_kc where 成绩<60 

6

select  from xsqk where 性别=0 order by 所在系 desc

7

select 课程号,avg(成绩) as 平均分 from xs_kc group by 课程号

8

select count()as 学生人数 from xs_kc where 课程号='101'

9

select  from xsqk where 出生日期 < (select 出生日期 from xsqk where 姓名='刘明')

10

ALTER TABLE xs_kc      

ADD CONSTRAINT xf_rule CHECK(学分 >=1 and  学分 <= 5)

1,打开”控制面板“下”管理工具“中的”数据库源“;

,按”添加“添加一个新的数据源,在选择栏里选“Driver do microsoft Access (mdb)”,完成后将出现一个框,在“数据库源”里面输入你想写的名称,我取名叫“ABC”,说明不需要填,接着,按下面的选择,寻找你的数据库地址和选中(注意,请先备份自己的ACCESS数据库),然后确定。数据源在这里建好了,剩下转换了。

,打开SQL000企业管理器,进入数据库,新建一个空的数据库“ABC”;

4,选择新建立的数据库,按鼠标右键,选择“所有务”下“导入数据”,按“下一步”继续;

5,在数据库源下拉但中选择”Driver do microsoft Access(mdb)“,在”用户/系统DSN“中,选种你刚才添加的”ABC“,按 ”下一步“;

6,“目的”不需要修改,选择服务器(一般下为自己的本机local,也可以选择服务器地址或者局域网地址,确定你的权限是否可以 *** 作,),使用WINDOWS 身份验证指用自己的系统管理员身份 *** 作,使用SQL身份 *** 作验证可以用于网站的 *** 作,推荐用后者;

7,选上使用SQL身份 *** 作验证后,填写你的用户名和密码,我自己选择的是系统默认号码sa,,数据库选择刚新建的ABC,按下一步;

8,这一步的两个单项选择,从数据源复制表和视图与用一条查询指令指定要传输的数据,选择前者,按下一步继续;

9,这里将出现你自己ACCESS数据库的表,按全选后,下一步;

10,DTS导入/导出向导,看立即运行被选中按下一步,

11,按完成继续;

1,这个步骤你将看到你的数据被导入SQL000里面,当出现已经成功把XXX个表导入到数据库的字样,而且所有的表前面都有绿色的勾,就表示成功导入所有数据,如果中途出现问题或者表前面有红色的叉的话,说明该表没有成功导入,这时就要回去查看自己的 *** 作是否正确了

三,数据修改

1,由于SQL000里面没有自动号,所以你的以自动号设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的标示选择是,种子为1,增量为1,

,另外,ACCESS000转换成SQL000后,原来属性为是/否的字段将被转换成非空的bit,这时候你必须修改成自己想要的属性了;

,另外,大家要注意对时间函数的把握ACCESS与SQL是有很多不同的

ACCESS转MS SQL数据库的几点经验

1ACCESS的数据库中的自动号类型在转化时,sql server并没有将它设为自动号型,我们需在SQL创建语句中加上identity,表示自动号!

转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。

对此两种数据库进行 *** 作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:delete from user where id=10,而对SQL SERVER数据库进行删除是用:delete user where id=10

4日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。

5在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。

(1) 整数型

整数包括bigint、int、smallint和tinyint,从标识符的含义就可以看出,它们的表示数范围逐渐缩小。

l bigint:大整数,数范围为 -263 (-9223372036854775808)~263-1 (9223372036854775807) ,其精度为19,小数位数为0,长度为8字节

l int:整数,数范围为 -231 (-2,147,483,648) ~231 - 1 (2,147,483,647) ,其精度为10,小数位数为0,长度为4字节。

l smallint:短整数,数范围为 -215 (-32768) ~215 - 1 (32767) ,其精度为5,小数位数为0,长度为2字节。

l tinyint:微短整数,数范围为 0~255,长度为1字节,其精度为3,小数位数为0,长度为1字节。

(2) 精确整数型

精确整数型数据由整数部分和小数部分构成,其所有的数字都是有效位,能够以完整的精度存储十进制数。精确整数型包括decimal 和 numeric两类。从功能上说两者完全等价,两者的唯一区别在于decimal不能用于带有identity关键字的列。

声明精确整数型数据的格式是numeric | decimal(p[,s]),其中p为精度,s为小数位数,s的缺省值为0。例如指定某列为精确整数型,精度为6,小数位数为3,即decimal(6,3),那么若向某记录的该列赋值56342689时,该列实际存储的是563427。

decimal和numeric可存储从 -1038 +1 到 1038 –1 的固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为5字节,最多为17字节。

l 精度为1~9时,存储字节长度为5;

l 精度为10~19时,存储字节长度为9;

l 精度为20~28时,存储字节长度为13;

l 精度为29~38时,存储字节长度为17。

例如若有声明numeric(8,3),则存储该类型数据需5字节,而若有声明numeric(22,5),则存储该类型数据需13字节。

注意:声明精确整数型数据时,其小数位数必须小于精度;在给精确整数型数据赋值时,必须使所赋数据的整数部分位数不大于列的整数部分的长度。

(3) 浮点型

浮点型也称近似数值型。顾名思义,这种类型不能提供精确表示数据的精度,使用这种类型来存储某些数值时,有可能会损失一些精度,所以它可用于处理取值范围非常大且对精确度要求不是十分高的数值量,如一些统计量。

有两种近似数值数据类型:float[(n)]和real,两者通常都使用科学计数法表示数据,即形为:尾数E阶数,如56432E20,-298E10,1287659E-9等。

l real:使用4字节存储数据,表数范围为-340E + 38 到 340E + 38,数据精度为7位有效数字。

l float:定义中的n取值范围是1~53,用于指示其精度和存储大小。当n在1~24之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字;当n在25~53之间时,存储长度为8字节,精度为15位有效数字。当缺省n时,代表n在25~53之间。float型数据的数范围为- 179E+308 到 179E+308。

(4) 货币型

SQL Server提供了两个专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值。

l money:数据的数范围为-263 (-9223372036854775808)~263-1 (9223372036854775807) ,其精度为19,小数位数为4,长度为8字节。money的数的范围与bigint相同,不同的只是money型有4位小数,实际上,money就是按照整数进行运算的,只是将小数点固定在末4位。

l smallmoney:数范围为 –231 (-2,147,483648) ~231 - 1 (2,147,483647) ,其精度为10,小数位数为4,长度为4字节。可见smallmoney与int的关系就如同money与bigint的关系。

当向表中插入money或smallmoney类型的值时,必须在数据前面加上货币表示符号($),并且数据中间不能有逗号(,);若货币值为负数,需要在符号$的后面加上负号(-)。例如:$1500032,$680,$-200009088都是正确的货币数据表示形式。

(5) 位型

SQL Server中的位(bit)型数据相当于其他语言中的逻辑型数据,它只存储0和1,长度为一个字节。但要注意,SQL Server对表中bit类型列的存储作了优化:如果一个表中有不多于 8 个的bit列,这些列将作为一个字节存储,如果表中有 9 到 16 个 bit 列,这些列将作为两个字节存储,更多列的情况依此类推。

当为bit类型数据赋0时,其值为0,而赋非0(如100)时,其值为1。

若表中某列为bit类型数据,那么该列不允许为空值(有关空值概念本节稍后即做介绍),并且不允许对其建立索引。

(6) 字符型

字符型数据用于存储字符串,字符串中可包括字母、数字和其它特殊符号(如#、@、&等等)。在输入字符串时,需将串中的符号用单引号或双引号括起来,如’abc’、”Abc<Cde”。

SQL Server字符型包括两类:固定长度 (char) 或可变长度 (varchar) 字符数据类型。

l char[(n)]

定长字符数据类型,其中n定义字符型数据的长度,n在1到8000之间,缺省为1。当表中的列定义为char(n)类型时,若实际要存储的串长度不足n时,则在串的尾部添加空格以达到长度n,所以char(n)的长度为n。例如某列的数据类型为char(20),而输入的字符串为”ahjm1922”,则存储的是字符ahjm1922和12个空格。若输入的字符个数超出了n,则超出的部分被截断。

l varchar[(n)]

变长字符数据类型,其中n的规定与定长字符型char中n完全相同,但这里n表示的是字符串可达到的最大长度。varchar(n)的长度为输入的字符串的实际字符个数,而不一定是n。例如,表中某列的数据类型为varchar(100),而输入的字符串为”ahjm1922”,则存储的就是字符ahjm1922,其长度为8字节。

当列中的字符数据值长度接近一致时,例如姓名,此时可使用 char;而当列中的数据值长度显著不同时,使用varchar较为恰当,可以节省存储空间。

(7) Unicode字符型

Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理。SQL Server的Unicode字符型可以存储Unicode标准字符集定义的各种字符。

Unicode字符型包括nchar[(n)]和nvarchar[(n)]两类。nchar是固定长度 Unicode 数据的数据类型,nvarchar 是可变长度 Unicode 数据的数据类型,二者均使用 UNICODE UCS-2 字符集。

l nchar[(n)]:nchar[(n)]为包含n个字符的固定长度 Unicode 字符型数据,n 的值在 1 与 4,000 之间,缺省为1。长度为2n字节。若输入的字符串长度不足n,将以空白字符补足。

l nvarchar[(n)]:nvarchar[(n)]为最多包含n个字符的可变长度 Unicode 字符型数据,n 的值在 1 与 4,000之间,缺省为1。长度是所输入字符个数的两倍。

实际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。

(8) 文本型

当需要存储大量的字符数据,如较长的备注、日志信息等等,字符型数据的最长8000个字符的限制可能使它们不能满足这种应用需求,此时可使用文本型数据。

文本型包括text和ntext两类,分别对应ASCII字符和Unicode字符。text类型可以表示最大长度为 231-1 (2,147,483,647) 个字符,其数据的存储长度为实际字符数个字节。ntext可表示最大长度为 230 - 1 (1,073,741,823) 个Unicode字符,其数据的存储长度是实际字符个数的两倍(以字节为单位)。

(9) 二进制型

二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。

l binary [(n) ]:固定长度的n个字节二进制数据。n取值范围为 1 到 8,000,缺省为1。binary(n)数据的存储长度为 n+4 字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截断。

输入二进制值时,在数据前面要加上0x,可以用的数字符号为0—9、A—F(字母大小写均可)。因此,二进制数据有时也被称为十六进制数据。例如0xFF、0x12A0分别表示值FF和12A0。因为每字节的数最大为FF,故在“0x”格式的数据每两位占1个字节。

l varbinary [(n) ]:n个字节变长二进制数据。n取值范围为 1 到 8,000,缺省为1。varbinary(n)数据的存储长度为实际输入数据长度+4个字节。

(10) 日期时间类型

日期时间类型数据用于存储日期和时间信息,包括datetime和smalldatetime两类。

l datetime:datetime类型可表示的日期范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(333 毫秒或 000333 秒),例如1到3毫秒的值都表示为0毫秒,4到6毫秒的值都表示为4毫秒。

datetime类型数据长度为8字节,日期和时间分别使用4个字节存储。前4 字节用于存储datetime类型数据中距1900 年 1 月 1 日的天数,为正数表示日期在1900年1月1日之后,为负数则表示日期在1900年1月1日之前。后4个字节用于存储datetime类型数据中距12:00(24小时制)的毫秒数。

用户以字符串形式输入datetime类型数据,系统也以字符串形式输出datetime类型数据,将用户输入到系统以及系统输出的datetime类型数据的字符串形式称为datetime类型数据的“外部形式”,而将datetime在系统内的存储形式称为“内部形式”,SQL Server负责datetime类型数据的两种表现形式之间的转换,包括合法性检查。

用户给出datetime类型数据值时,日期部分和时间部分分别给出。

日期部分的表示形式常用的格式如下:

年 月 日 2001 Jan 20、2001 Janary 20

年 日 月 2001 20 Jan

月 日[,]年 Jan 20 2001、Jan 20,2001、Jan 20,01

月 年 日 Jan 2001 20

日 月[,]年 20 Jan 2001、20 Jan,2001

日 年 月 20 2001 Jan

年(4位数) 2001表示2001年1月1日

年月日 20010120、010120

月/日/年 01/20/01、1/20/01、01/20/2001、1/20/2001

月-日-年 01-20-01、1-20-01、01-20-2001、1-20-2001

月日年 012001、12001、01202001、1202001

说明:年可用4位或2位表示,月和日可用1位或2位表示。

时间部分常用的表示格式如下:

时:分 10:20、08:05

时:分:秒 20:15:18、20:15:182

时:分:秒:毫秒 20:15:18:200

时:分AM|PM 10:10AM、10:10PM

l smalldatetime:smalldatetime类型数据可表示从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间,数据精确到分钟,即29998 秒或更低的值向下舍入为最接近的分钟,29999 秒或更高的值向上舍入为最接近的分钟。Smalldatetime类型数据的存储长度为4字节,前2个字节用来存储smalldatetime类型数据中日期部分距1900年1月1日之后的天数;后2个字节用来存储smalldatetime类型数据中时间部分距中午12点的分钟数。

用户输入smalldatetime类型数据的格式与datetime类型数据完全相同,只是它们的内部存储可能不相同。

(11) 时间戳型

标识符是timestamp。若创建表时定义一个列的数据类型为时间戳类型,那么每当对该表加入新行或修改已有行时,都由系统自动将一个计数器值加到该列,即将原来的时间戳值加上一个增量。记录timestamp列的值实际上反映了系统对该记录修改的相对(相对于其他记录)顺序。一个表只能有一个timestamp 列。Timestamp类型数据的值实际上是二进制格式数据,其长度为8字节。

(12) 图象数据类型

标识符是image,它用于存储、照片等。实际存储的是可变长度二进制数据,介于 0 与 231-1 (2,147,483,647) 字节之间。

(13) 其它数据类型

除了上面所介绍的常用数据类型外,SQL Server 2000还提供了其它几种数据类型:cursor、sql_variant、table和uniqueidentifier。

Cursor:是游标数据类型,用于创建游标变量或定义存储过程的输出参数。

Sql_variant:是一种存储 SQL Server 支持的各种数据类型(除text、ntext、image、timestamp 和 sql_variant 外)值的数据类型。Sql_variant的最大长度可达 8016 字节。

Table:是用于存储结果集的数据类型,结果集可以供后续处理。

Uniqueidentifier:是唯一标识符类型。系统将为这种类型的数据产生唯一标识值,它是一个16字节长的二进制数据。

日期时间类型:time:

格式:hh:mm:ss[nnnnnnn]

范围:00:00:000000000 到23:59:599999999

精确度:100 纳秒

存储大小(以字节为单位):3-5

用户定义的秒的小数精度:有

时区偏移量:无

date:

格式:YYYY-MM-DD

范围:0001-01-01 到 9999-12-31

精确度:1天

存储大小(以字节为单位):3

用户定义的秒的小数精度:无

时区偏移量:无

smalldatetime:

格式:YYYY-MM-DD hh:mm:ss

范围:1900-01-01 到 2079-06-06

精确度:1分钟

存储大小(以字节为单位):4

用户定义的秒的小数精度:无

时区偏移量:无

datetime:

格式:YYYY-MM-DD hh:mm:ss[nnn]

范围:1753-01-01 到 9999-12-31

精确度:000333秒

存储大小(以字节为单位):8

用户定义的秒的小数精度:无

时区偏移量:无

datetime2:

格式:YYYY-MM-DD hh:mm:ss[nnnnnnn]

范围:0001-01-01 00:00:000000000 到9999-12-31 23:59:599999999

精确度:100钠秒

存储大小(以字节为单位):6 到 8

用户定义的秒的小数精度:有

时区偏移量:无

datetimeoffset:

格式:YYYY-MM-DD hh:mm:ss[nnnnnnn] [+|-]hh:mm

范围:0001-01-01 00:00:000000000 到9999-12-31 23:59:599999999(以UTC 时间表示)

精确度:100钠秒

存储大小(以字节为单位):8 到10

用户定义的秒的小数精度:有

时区偏移量:有

create table simp

(

id int,

time datetime --SQL里自带时间格式

)

insert into simp(id,time) values (100,'2005-3-23 11:23:25')

go

select from simp

drop table simp

决定输入的日期如何解释的是set dateformat设置

SET DATEFORMAT

设置用于输入 datetime 或 smalldatetime 数据的日期部分(月/日/年)的顺序。

语法

SET DATEFORMAT { format | @format_var }

参数

format | @format_var

是日期部分的顺序。可以是 Unicode 或转换为 Unicode 的 DBCS。有效参数包括 mdy、dmy、ymd、ydm、myd 和 dym。美国英语默认值是 mdy。

注释

该设置仅用在将字符串转换为日期值时的解释中。它对日期值的显示没有影响。

SET DATEFORMAT 的设置是在执行或运行时设置,而不是在分析时设置。

权限

SET DATEFORMAT 权限默认授予所有用户。

示例

下例使用不同的日期格式处理不同格式的日期字符串。

SET DATEFORMAT mdy

GO

DECLARE @datevar datetime

SET @datevar = '12/31/98'

SELECT @datevar

GO

SET DATEFORMAT ydm

GO

DECLARE @datevar datetime

SET @datevar = '98/31/12'

SELECT @datevar

GO

SET DATEFORMAT ymd

GO

DECLARE @datevar datetime

SET @datevar = '98/12/31'

SELECT @datevar

GO

--将表数据生成SQL脚本的存储过程 

CREATE PROCEDURE dboUspOutputData 

@tablename sysname 

AS 

declare @column varchar(1000) 

declare @columndata varchar(1000) 

declare @sql varchar(4000) 

declare @xtype tinyint 

declare @name sysname 

declare @objectId int 

declare @objectname sysname 

declare @ident int 

set nocount on 

set @objectId=object_id(@tablename) 

if @objectId is null -- 判断对象是否存在 

begin 

print 'The object not exists' 

return 

end 

set @objectname=rtrim(object_name(@objectId)) 

if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密 

begin 

print 'object not in current database' 

return 

end 

if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table 

begin 

print 'The object is not table' 

return 

end 

select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80 

if @ident is not null 

print 'SET IDENTITY_INSERT '+@TableName+' ON' 

declare syscolumns_cursor cursor 

for select cname,cxtype from syscolumns c where cid=@objectid order by ccolid 

open syscolumns_cursor 

set @column='' 

set @columndata='' 

fetch next from syscolumns_cursor into @name,@xtype 

while @@fetch_status < >-1 

begin 

if @@fetch_status < >-2 

begin 

if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理 

begin 

set @column=@column+case when len(@column)=0 then'' else ','end+@name 

set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','',' 

end 

+case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char 

when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar 

when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime 

when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime 

when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier 

else @name end 

end 

end 

fetch next from syscolumns_cursor into @name,@xtype 

end 

close syscolumns_cursor 

deallocate syscolumns_cursor 

set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename 

print '--'+@sql 

exec(@sql) 

if @ident is not null 

print 'SET IDENTITY_INSERT '+@TableName+' OFF' 

GO 

exec UspOutputData 你的表名

sql数据库私人数据类型有哪些,1、 字符串类型主要是char(n)varchar(n)varchar(max)text。它们的详细描述如下:

2、 Unicode字符串类型主要包括四种字符串类型:nchar(n)nvarchar(n)nvarchar(max)ntext。它们的详细描述如下:

3、 二进制类型主要包括五种:bit binary(n)varbinary(n)varbinary(max)image。它们的详细描述如下:

4、 数字,主要包括tinyintindexial(p,s) numeric (p,s) float (n)等。它们的详细描述如下:

5、 日期类型,主要包括DateTimesmallDateTimeTimestamp等。它们的详细描述如下:

以上就是关于SQL 数据库全部的内容,包括:SQL 数据库、怎么把assecc数据库转换成sql数据库文件、SQL Server数据库--表--新建表时的数据类型都是什么意思啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9547770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存