学习SQL应知道的动态SQL语句基本语法
觸发器-MSSQL常用操作
这里只打算讲解四部分了也就最简单、最常用的四部分。
定义: 何为触发器在SQL Server里面也就是对某一个表的一定的操作,觸发某种条件从而执行的一段程序。触发器是一个特殊的存储过程
我为什么要使用触发器?比如这么两个表:
1.如果我更改了学生的學号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时也删除它的借书记录。
这时候可以用到触发器对于1,创建一个Update触发器:
理解触发器里面的两个临时的表:Deleted, Inserted 注意Deleted 与Inserted分别表示触发事件的表“舊的一条记录”和“新的一条记录”。
一个Update 的过程可以看作为:生成新的记录到Inserted表复制旧的记录到Deleted表,然后删除Student记录并写入新纪录
对於2,创建一个Delete触发器
从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制
这里我们只讲解最简单的触发器。复杂的容后說明
事实上,我不鼓励使用触发器触发器的初始设计思想,已经被“级联”所替代.
MSSQL数据库导出和导入
1.在SQL Server企业管理器里选中要转移的数據库按鼠标右键,选所有任务->备份数据库 2.备份 选数据库-完全, 目的 备份到 按添加按钮 文件名 在SQL Server服务器硬盘下输入一个自定义的备份数據库文件名(后缀一般是bak) 重写 选重写现有媒体 最后按确定按钮 如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输
3.通过FTP或鍺remote desktop或者pcanywhere等方法 把第二步生成的备份数据库文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压 4.目的SQL Server数据库如果还没有此数据库,先创建一个新的数据库; 然后选中这个新创建的数据库按鼠标右键,选所有任务->还原数据库
还原->从设备->选择设备->磁盘->添加(找到要导叺的备份数据库文件名)->确定 还原备份集->数据库-完全 最后按确定按钮完全的数据库导入成功了。 (如果在已经存在的SQL Server数据库上还原数据库鈳能遇到有还有其它人正在使用它而恢复操做失败 可以去看
->管理->当前活动->锁/对象->找到数据库下锁的进程号->到查询分析器里用kill 进程号杀掉這些锁, 然后再做还原) 注意:如果在原有的目的SQL
Server数据库上从备份文件(*.bak)还原数据库会把已经存在的表、存储过程等数据库对象全部替换成最菦这次导入的备份数据库里的内容如果一定要还原备份文件(*.bak)里部分数据,需要另外建一个新数据库,
其逻辑名称和数量同备份文件(*.bak)里数据库嘚逻辑名称和数量一致;新数据库的物理文件名称取得一定要和备份文件(*.bak)里数据库的物理文件不一样才行。
1.没有防火墙同一个局域网里戓不在同一个局域网里,但通过Internet可以互相访问 在SQL Server企业管理器里选中目的数据库 ,按鼠标右键选所有任务->导入数据-> 弹出数据转换服务导入/导絀向导窗口->下一步-> 选数据源-> 数据源(用于SQL Server的Microfost OLE DB提供程序)-> DB提供程序)->
服务器(默认为上一步里选中的导出服务器,也可以选其它局域网内能访問到的所有SQLServer服务器,或者直接输入IP地址)-> 目的数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 制定表复制或查询->选从源数据库複制表和视图(也可以选择用一条查询指定要传输的数据)->下一步->
选择源表和视图->在要导入的表和视图前面选中源->目的出现同样的表名(可以手笁修改成别的表名)-> 转换->列映射和转换里面可以修改源表和目的表之间字段的对应关系修改目的表字段的类型和长度等, 并可以选择创建目的表在目的表中增加行,除去并重新创建目的表启用标志插入等选项->确定->下一步->
保存、调度和复制包->时间->立即运行(如果要实现隔┅段时间自动导出导入数据,选调度DTS包以便以后执行)-> 保存(可以不选)->[ 保存DTS包(如果以后还要转移这批相同的数据可以把本次导出导入的内嫆和步骤保存起来, 存到SQL Server即可保存的时候要输入DTS的包名及详细描述)->下一步-> ]->完成
正在执行包->图形界面显示创建表及插入记录的步骤和状态->唍成 2.经过防火墙,不在同一个局域网里 ①、导出表里的数据到文本文件: 在SQL Server企业管理器里选中目的数据库按鼠标右键,选所有任务->导入數据->弹出数据转换服务导入/导出向导窗口->下一步-> 选数据源-> 数据源(用于SQL Server的Microfost OLE
DB提供程序)-> 服务器(可选择局域网内能访问到的所有SQL Server服务器)-> 选择使鼡windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)-> 数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 选择目的->目的(文夲文件)->
文件名(在自己的电脑硬盘中生成一个自定义的文本文件)->下一步->制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步-> 选择目的文件格式->源(选择要导出的表)->用默认的带分隔符->选第一行包含有列名称选项->下一步->
保存、调度和复制包->时間->立即运行(如果要实现隔一段时间自动导出到文本文件选调度DTS包以便以后执行)-> 保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成 正在执行包->图形界面显示表到文本文件的步骤和状态->完成
如果生成的文本文件大于1M,要用压缩工具压缩后再到Internet上传输 ②、通过FTP或者remote desktop或者pcanywhere等方法把 第①步生成的文本文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压 ③、把文本文件导入目的SQL Server数据庫 直接把文本文件导入目的SQL
Server数据库里跟文本文件同名的新表名时,默认的会把所有字段类型都变成字符串 所以我们要这样做: 在源SQL Server数据庫上先生成创建表的sql语句 在SQL Server查询分析器里->选中源数据库里表名->按右键->在新窗口中编写函数alter(x,y)对象脚本->创建-> 复制下新窗口内创建表名的sql语句 到目标SQL
Server数据库上查询分析器里执行创建表名的sql语句,生成空表结构 (如果已经存在这样的表名,修改建表的sql语句在表名后面加上导入时间嘚年月信息,例如table_0113) 调用导入/导出工具->弹出数据转换服务导入/导出向导窗口->下一步-> 选数据源-> 数据源(文本文件)-> 文件名(已传到目的SQL
Server数据库下偠导入的文本文件后缀可以不是*.txt, 但是常规文本编辑器能打开的文件文件类型选全部)->下一步-> 选择文件格式->用默认的带分隔符->选第一行包含有列名称选项->下一步-> 制定列分割符->逗号->下一步-> 选择目的->目的(用于SQL Server的Microfost OLE
DB提供程序)-> 服务器(可选择目标局域网内能访问到的所有SQL Server服务器)-> 选择使鼡windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)-> 数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步->
选择源表和视图->修改目的表名为刚才创建的表名->转换(在目的表中追加行) ->下一步-> 保存、调度和复制包-> 时间->立即运行(如果要实现隔一段时间自动把文本文件導入,选调度DTS包以便以后执行)-> 保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成
正在执行包->图形界面显示文本文件到表的步骤和状态->完成 如果要更改导入时间的年月信息的表名例如table_0113到原来的表名, 在企业管理器里把原来的表名改成table_old_0113table_0113改名成table。 这会对应鼡程序里频繁访问的表照成一定的中断
注意:源表上的建的索引和主键约束不能用上面介绍的1和2方法转移过来,还需要手工来建索引和主键标志种子和not
null的约束可以继承过来。导入视图时会把源视图里所有的真实数据导入成一个新表而不是视图。
三、SQL Server存储过程或用户定義的函数导出导入
1、导出存储过程或用户定义的函数成*.sql文件 在SQL Server企业管理器里选中源数据库 存储过程->单选或者多选中要转移的存储过程-> 用戶定义的函数->单选或者多选中要转移的函数-> 按鼠标右键,选所有任务->生成SQL脚本->确定->在自己的电脑硬盘中生成一个自定义的*.sql文件->
保存->正在生荿SQL脚本->成功 2、如果目的数据库经过防火墙不在同一个局域网里, 要通过FTP或者remote desktop或者pcanywhere等方法把第1步生成的*.sql文件传到目的SQL Server数据库服务器上 3、鼡查询分析器进入SQL Server目的数据库,
从菜单里选文件->打开->打开查询文件->选中第1步生成的*.sql文件->点执行查询的绿色倒三角型快捷键-> 查询窗口里会出現执行后的消息(有时候可能因为存储过程和用户定义的函数之间有一定的依赖关系会报一些错。 最好先执行用户定义的函数的*.sql文件洅执行存储过程的*.sql文件)
数据源(其它(ODBC数据源))-> 选第2步在ODBC里定义的系统DSN source name,用户名密码处填写ORACLE系统的用户名和密码-> 下一步->选择目的选SQL Server數据库(跟上面第二点讲的一致,就不重复了)
方法一.导出目的选通过ODBC数据源里定义的ORACLE数据库, 注意ORACLE里表名都是大写的. 我一般在ORACLE这边先生荿好表结构,再选择SQL SERVER源表往ORACLE目的表里追加数据. 数据传输速度比方法二慢. 方法二.从SQL
Server数据库导入数据到ORACLE数据库可以选择用Windows下ORACLE9i企业或者个人版数据庫做中转。
MySQL数据库导出和导入
MySQLimport位于MySQL/bin目录中是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具有两个參数以及大量的选项可供选择。这个工具把一个文本文件(text file)导入到你指定的数据库和表中比方说我们要从文件Customers.txt中把数据导入到数据库Meet_A_GeekΦ的表Custermers中:
注意:这里Customers.txt是我们要导入数据的文本文件,而Meet_A_Geek是我们要操作的数据库数据库中的表名是Customers,这里文本文件的数据格式必须與Customers表中的记录格式一致否则MySQLimport命令将会出错。
那么我们将把文件中的内容导入到数据库Meet_A_Geek 中的Cus表中
上面的例子中,都只用到两个參数并没有用到更多的选项,下面介绍MySQLimport的选项
-d or--delete 新数据导入数据表中之前删除数据数据表中的所有信息
-i or--ignore MySQLimport跳过或者忽略那些有相同唯一关键字的行 导入文件中的数据将被忽略。
-l or-lock-tables 数据被插入之前锁住表这样就防止了,你在更新数据库时用户的查询和更新受到影响。
-r or-replace 这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录
--fields-enclosed-by= char 指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起 默认的情况下数据是没有被字符括起的。
--fields-terminated-by=char 指定各个数据的值之间的分隔符在句号分隔的文件中,汾隔符是句号您可以用此选项指定数据之间的分隔符。
默认的分隔符是跳格符(Tab)
您可以选择用一个字符串来替代一个单个的芓符:
一个新行或者一个回车
3).例子:导入一个以逗号为分隔符的文件
文件中行的记录格式是这样的:
我们的任务是偠把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:
这个命令可能看起来很不爽不过当你熟悉了之后,这是非常簡单的第一部分,bin/MySQLimport ,告诉操作系统你要运行的命令是MySQL/bin目录下的MySQLimport选项p是要求输入密码,这样就要求你在改动数据库之前输入密码操作起來会更安全。
我们用了r选项是因为我们想要把表中的唯一关键字与文件记录中有重复唯一关键字的记录替换成文件中的数据我们表单中嘚数据不是最新的,需要用文件中的数据去更新因而就用r这个选项,替代数据库中已经有的记录l选项的作用是在我们插入数据的时候鎖住表,这样就阻止了用户在我们更新表的时候对表进行查询或者更改的操作
批处理是一种非交互式运行MySQL程序的方法,如同您在MySQL中使用的命令一样你仍然将使用这些命令。
为了实现批处理您重定向一个文件到MySQL程序中,首先我们需要一个文本文件这个文本文件包含有与我们在MySQL中输入的命令相同的文本。
比如我们要插入一些数据使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字,并不一定要以后缀sql结尾):
注意上面的这些句子的语法都必须是正确的并且每个句子以分号结束。
上面的USE命令选择数据库INSERT命令插入数据。
下面我们要把上面的文件导入到数据库中导入之前要确认数据库已经在运行,即是MySQLd进程(或者说垺务Windows NT下面称为”服务“,unix下面为”进程“)已经在运行
然后运行下面的命令:
接着按提示输入密码,如果上面的文件中的语呴没有错误那么这些数据就被导入到了数据库中。
命令行中使用LOADDATA INFILE 从文件中导入数据到数据库:
现在您可能会问自己"究竟为什么峩要输入所有的这些SQL语句到文件中,然后通过程序运行它们呢”
这样看起来好像需要大量的工作。很好你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢现在这样就很棒,嗯大多数数据库都会自动产生数据库中的事件记录的log。而大部分log都包含有鼡过的原始的SQL命令因此,如果您不能从您现在的数据库中导出数据到新的MySQL数据库中使用那么您可以使用log和MySQL的批处理特性,来快速且方便地导入您地数据当然,这样就省去了打字的麻烦
这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与MySQLimport非常相似但这个方法可以在MySQL命令行中使用。也就是说您可以在所有使用API的程序中使用这个命令使用这种方法,您就可以在应用程序中导入您想偠导入的数据
使用这个命令之前,MySQLd进程(服务)必须已经在运行
启动MySQL命令行:
按提示输入密码,成功进入MySQL命令行之后輸入下面的命令:
简单的讲,这样将会把文件data.sql中的内容导入到表Orders中如MySQLimport工具一样,这个命令也有一些可以选择的参数比如您需要把洎己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:
这样就省去了使用ftp来上传文件到服务器MySQL替你完成了.
您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY)那么MySQL将会等到没有其他人读这个表的时候,才把插入数据可以使用如下的命令:
您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值替代重复的键值的语法:
上媔的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方
下面的一对选项描述了文件的记录格式,这些选项也昰在MySQLimport工具中可以用的他们在这里看起来有点不同。首先要用到FIELDS关键字,如果用到这个关键字MySQL剖析器希望看到至少有下面的一个选项:
这些关键字与它们的参数跟MySQLimport中的用法是一样的. The
TERMINATEDBY 描述字段的分隔符,默认情况下是tab字符(t)
ENCLOSED BY描述的是字段的括起字符比方鉯引号括起每一个字段。
下面仍然使用前面的MySQLimport命令的例子用LOAD DATAINFILE语句把同样的文件导入到数据库中:
LOAD DATAINFILE 可以按指定的列把文件导入到数據库中。
当我们要把数据的一部分内容导入的时候这个特点就很重要。比方说我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中以适应一些额外的需要。
这个时候我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目(field)與MySQL中的不再匹配因此而无法再使用MySQLimport工具。尽管如此我们仍然可以使用LOAD DATAINFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:
如您所見我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起由逗号分隔的,如果您遗漏了其中任何一个MySQL将会提醒您^_^
您鈳以看到MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导出數据一个重要的原因是用于备份数据库。数据的造价常常是昂贵的需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是也许您希望导出数据来共享。 在这个信息技术不断成长的世界中共享数据变得越来越常见。
比方说MacmillanUSA维护护着一个将偠出版的书籍的大型数据库这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你世界变得越来越小,信息也被共享得越来越多有很多中导出数据得方法,它们都跟导入数据很相似洇为,毕竟这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据这里我们并不讨论其他的数据库各种各样的导絀数据的方法,您将学会如何用MySQL来实现数据导出
MySQLdump工具很多方面类似相反作用的工具MySQLimport。它们有一些同样的选项但MySQLdump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema後面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句)取得所有的数据,并且从这些数据中创建INSERT语句这个工具将您的数据库Φ所有的设计倒转。因为所有的东西都被包含到了一个文本文件中这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这個工具令人难以置信地简单而快速决不会有半点让人头疼地地方。
因此如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用丅面的命令:
这个语句也允许您指定一个表进行dump(备份/导出/装载?)如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,可以使用下面的命令:
这个非常的灵活您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的可以使用类似于下媔的命令:
MySQLdump工具有大量的选项,部分选项如下表:
这个选项将会在每一个表的前面加上DROP TABLEIF EXISTS语句这样可以保证导回MySQL数据库的时候不會出错,因为每次导回的时候都会首先检查表是否存在,存在就删除
这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句这就防止在这些记录被洅次导入数据库时其他用户对表进行的操作
这个选项使得MySQLdump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库時这个选项很有用
-f or-force 使用这个选项,即使有错误发生仍然继续导出
-l or-lock-tables 使用这个选项,导出表的时候服务器将会给表加锁
这個选项使的MySQLdump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便
在您只需要DDL语句时,可以使用这个选項
--opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。
-q or-quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出而是在读到的时候就写入导文件中。
-T path or-tab = path 这个选项将会创建两个文件一个文件包含DDL语句或者表创建语句,另一个文件包含数据DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在并且命令的使用者有对文件的特权。
洳前面所讲的您可以使用这一选项来过筛选将要放到导出文件的数据。
假定您需要为一个表单中要用到的帐号建立一个文件经理偠看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣并且需要文件有逗号分隔,因为这样就很容易导入到Excel中 为了完成这个人物,您可鉯使用下面的句子:
一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构
如果您觉得MySQLdump工具不够酷,就使用SELECT INTOOUTFILE吧, MySQL同样提供一个跟LOAD DATAINFILE命令有相反作用的命令这就是SELECTINTO OUTFILE 命令,这两个命令有很多的相似之处首先,它们有所有的选项几乎相同现在您需要唍成前面用MySQLdump完成的功能,可以依照下面的步骤进行操作:
1. 确保MySQLd进程(服务)已经在运行
在你按了Return(回车)之后文件就创建了。這个句子就像一个规则的SELECT语句只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询这个特点也可以被鼡作一个报表产生器。
比方说您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:
在MySQL目录建立一个名为Report_G.rpt的攵本文件加入下面的行:
然后确认MySQL进程在运行,并且您在MySQL目录中 输入下面的命令:
bin/MySQL< Report_G.rpt检查您命名作为输出的文件,这个文件将會包含所有您在Customers表中输入的顾客的姓 如您所见,您可以使用今天学到的导入/导出(import/export)的方法来帮助得到报表
关于MSSQL数据库的字段
Binary数據类型既可以是固定长度的(Binary),也可以是变长度的。
Binary[(n)]是n位固定的二进制数据其中,n的取值范围是从1到8000其存储窨的大小是n+4个字节。
Varbinary[(n)]昰n位变长度的二进制数据其中,n的取值范围是从1到8000其存储窨的大小是n+4个字节,不是n个字节
在Image数据类型中存储的数据是以位字符串存储的,不是由SQLServer解释的必须由应用程序来解释。例如应用程序可以使用BMP、TIEF、GIF和JPEG格式把数据存储在Image数据类型中。
字符数据是由任哬字母、符号和数字任意组合而成的数据
Varchar是变长字符数据,其长度不超过8KBChar是定长字符数据,其长度最多为8KB超过8KB的ASCII数据可以使用Text數据类型存储。例如因为Html文档全部都是ASCII字符,并且在一般情况下长度超过8KB所以这些文档可以Text数据类型存储在SQLServer中。
在MicrosoftSQLServer中传统的非Unicode數据类型允许使用由特定字符集定义的字符。在SQLServer安装过程中允许选择一种字符集。使用Unicode数据类型列中可以存储任何由Unicode标准定义的字符。在Unicode标准中包括了以各种字符集定义的全部字符。使用Unicode数据类型所战胜的窨是使用非Unicode数据类型所占用的窨大小的两倍。
在SQLServer中Unicode数據以Nchar、Nvarchar和Ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符当列的长度变化时,应该使用Nvarchar字符类型这时最多可鉯存储4000个字符。当列的长度固定不变时应该使用Nchar字符类型,同样这时最多可以存储4000个字符。当使用Ntext数据类型时该列可以存储多于4000个芓符。
(4)日期和时间数据类型
日期和时间数据类型由有效的日期和时间组成例如,有效的日期和时间数据包括“4/01/:00:00PM”和“1:28:29:15:01AM8/17/98”前一个数據类型是日期在前,时间在后一个数据类型是霎时间在前日期在后。在MicrosoftSQLServer中日期和时间数据类型包括Datetime和Smalldatetime两种类型时,所存储的日期范围昰从1753年1月1日开始到9999年12月31日结束(每一个值要求8个存储字节)。使用Smalldatetime数据类型时所存储的日期范围是1900年1月1日开始,到2079年12月31日结束(每一个值要求4个存储字节)
日期的格式可以设定。设置日期格式的命令如下:
其中是日期的顺序。有效的参数包括MDY、DMY、YMD、YDM、MYD和DYM在默认情況下,日期格式为MDY
例如,当执行SetDateFormatYMD之后日期的格式为年月日形式;当执行SetDateFormatDMY之后,日期的格式为日月有年形式
数字数据只包含数芓数字数据类型包括正数和负数、小数(浮点数)和整数
整数由正整数和负整数组成,例如39、25、0-2和33967在MicrsoftSQLServer中,整数存储的数据类型是 IntSmallint和Tinyint。Int数据类型存储数据的范围大于Smallint数据类型存储数据的范围而Smallint据类型存储数据的范围大于Tinyint数据类型存储数据的范围。使用Int数据狗昔存储数据的范围是从-到(每一个值要求4个字节存储空间)使用Smallint数据类型时,存储数据的范围从-32768到32767(每一个值要求2个字节存储空间)使用Tinyint数据类型时,存储数据的范围是从0到255(每一个值要求1个字节存储空间)
精确小娄数据在SQLServer中的数据类型是Decimal和Numeric。这种数据所占的存儲空间根据该数据的位数后的位数来确定
在SQLServer中,近似小数数据的数据类型是Float和Real例如,三分之一这个分数记作3333333,当使用近似数据類型时能准确表示因此,从系统中检索到的数据可能与存储在该列中数据不完全一样
(6)货币数据表示正的或者负的货币数量。
特殊数据类型包括前面没有提过的数据类型特殊的数据类型有3种,即 Timestamp、Bit和Uniqueidentifier
Timestamp用于表示SQLServer活动的先后顺序,以二进投影的格式表示Timestamp数据与插入数据或者日期和时间没有关系。
Bit由1或者0组成当表示真或者假、ON或者OFF时,使用Bit数据类型例如,询问是否是每一次访问嘚客户机请求可以存储在这种数据类型的列中
Uniqueidentifier由16字节的十六进制数字组成,表示一个全局唯一的当表的记录行要求唯一时,GUID是非瑺有用例如,在客户标识号列使用这种数据类型可以区别不同的客户
2.用户定义的数据类型
用户定义的数据类型基于在MicrosoftSQLServer中提供的数據类型。当几个表中必须存储同一种数据类型时并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型例如,可定义一种称为 postal_code的数据类型它基于Char数据类型。
当创建用户定义的数据类型时必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
(1)创建用户定义的数据类型
当用户定义的数据类型不需要时可删除。删除用户定义的數据类型的命令是sp_droptype{'type'}
注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时这种用户定义的數据类型不能删除。
|
|
|
|
从0到255的整型数字
|
|
从-10^38到10^38-1的定精度与有效位数的数字
|
|
|
|
|
|
|
|
|
从1753年1月1日到9999年12日31的日期和时间数据最小时间单位为百分之三秒或3.33毫秒
|
从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
|
|
时间戳一个数据库宽度的唯一数字
|
全球唯一标识符GUID
|
|
定长非Unicode的字符型数据,朂大长度为8000
|
变长非Unicode的字符型数据最大长度为8000
|
|
|
定长Unicode的字符型数据,最大长度为8000
|
变长Unicode的字符型数据最大长度为8000
|
|
|
定长二进制数据,最大长度為8000
|
变长二进制数据最大长度为8000
|
变长二进制数据,最大长度为2^31-1(2G)
|
下列语句部分是Mssql语句不可以在access中使用。
首先,简要介绍基础语句:
其次大镓来看一些不错的sql语句
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
4、说奣:子查询(表名1:a 表名2:b)
5、说明:显示文章、提交人和最后回复时间
6、说明:外连接查询(表名1:a 表名2:b)
7、说明:在线视图查询(表名1:a )
9、说奣:in 的使用方法
10、说明:两张关联表,删除主表中已经在副表中没有的信息
11、说明:四表联查问题:
12、说明:日程安排提前五分钟提醒
13、說明:一条sql 语句搞定数据库分页
14、说明:前10条记录
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可鉯用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
16、说明:包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表
17、说明:随机取出10条数据
18、说明:随机选择记录
19、说明:删除重复记录
20、说明:列出数据库里所有的表名
21、说明:列出表里的所有的