概述
mssqlserver数据库基础
标识符
1、常规标识符的规则
(1)、首字符:标识符的第一个字符必须满足下列条件:
Unicode标准3.2定义的字母,通常就是字母az和AZ。
下划线(_)、at字符(@)、或数字符号(#)。
(2)、后续字符:
Unicode标准3.2中所定义的字母。
基本拉丁字符或其他国家/地区字符中的十进制数字。
at符号(@)、美元符号($)、数字符号或下划线。
(3)、不能是保留字:
常规标识符不能使用SQL Server内部的保留字,比如char。
(4)、不允许嵌入空格:
2、带分隔符的标识符
当一定要使用保留字时,如table,这样的标识符是SQLServer内部的保留字,如果非得这样使用,就必须用这样的方式:“table”。 (1)、分隔符 T-SQL规定下列符号为特定的分隔符。 1、双引号("):用于表示引用的标识符。 2、中括号([]):用于表示括号中的标识符。 (2)、什么时机使用分隔符 T-SQL常在下列情况下使用分隔符。 1、对象名称或对象名称的组成部分中包含保留字时。 2、使用其他特殊的字符时。
数据类型
数据通常需要定义一个数据类型,数据类型定义了对象可以容纳的数据的种类。
1、那些对象需要数据类型
(1)、表和视图的列:在定义表或视图时,其列需要定义数据类型。
(2)、存储过程的参数:在定义存储过程的T-SQL代码中定义参数的数据类型。
(3)、变量:如果在T-SQL中使用变量,需要定义数据类型。
(4)、带返回值的函数:返回一个或多个特定类型数据值的T-SQL函数中的返回值需要定义数据类型。
(5)、带返回代码的存储过程:具有返回代码的存储过程。
2、如何选择恰当的数据类型
(1)、必须
首先根据需要判断数据的种类、需要存储的数据的最大长度和大小,对于数字数据类型还要考虑精度和小数位数,然后再T-SQL中挑选备用的数据类型。
(2)、够用
接下来可以再备用的数据类型中挑选够用即可的类型作为最后的方案。比如要表述“身份证号码”这样的字段,nvarchar和nchar这样的数据类型都可以,最后我们可以使用nchar(18),因为身份证号码规定为统一的18位,所以选择定长的数据类型。
(3)、权衡
权衡空间和效率,权衡数据的存储方式等。
通常情况下,数据类型的长度越小,存储大量数据所需要的存储空间就越小。因此一次I/O读取到内存中的数据记录就会越多,同样大小的内存空间存储的记录数量就会更多,这样T-SQL语句使用数据时从内存读取的几率就增大了,所以自然效率就高,尤其是联机事务频繁的系统,这样的设计优点就十分明显。“细节决定成败”,数据类型的选择恰当与否往往会对数据库系统的性能产生非常大的影响。
常量
常量是指在T-SQL代码中其值始终不变的数据。常量的定义格式取决于其所属于的数据类型。
常量的使用不需要定义,直接在T-SQL中使用就可以,所以需要关注的是各种典型的常量的格式。
1、数值型常量的格式
数值型常量的格式不需要任何其他的符号,只需要按照特定的数据类型进行赋值就可以
(1)、bit常量:
0、1
(2)、int常量:
829、222
(3)、decimal(numeric)常量:
123.829、289.0
(4)、float(real)常量:
100.25E5
(5)、money(smallmoney)常量:
$122、$1223.920
2、字符串型常量的格式
字符串型常量的格式需要以单引号(’)包含起来。
1、非unicode字符串常量:‘Hello World’
2、unicode字符串常量:N’Hello World’ N在这里表示Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。也就是说加 N 就表示字符串用 Unicode 方式存储。但有时候加与不加都一样,又是什么原因呢?这是由于自动转换造成的。
3、单引号作为字符串常量的处理:如果单引号本身也属于字符串常量的内容,就需要使用单引号将其包含在内,比如’O’’‘Brien’实际上定义的就是字符串O’Brien。’‘你好’’,定义的就是’你好’。
4、日期时间型常量的格式
日期时间型常量的格式需要以单引号(’’)包含起来,和字符串常量的格式一致。
如:‘April 15,1998’ ‘04/15/98’ ‘14:30:24’ ‘04:24 PM’
注释
单行
多行
变量
普通局部变量 @stuName
游标变量 @cursorStuName
变量赋值
局部变量的赋值
T-SQL程序中给局部变量赋值有三种方法。
1、SET语句赋值
在T-SQL程序中,用SET语句给局部变量赋值的语法如下:
SET @local_variable=expression
其中,@local_variable为局部变量的名称,expression为有效的表达式,表示将表达式的值赋予局部变量。
2、select语句赋值
与上面的SET等效的赋值语句是将SET替换为SELECT。
SELECT @local_variable=expression
3、通过选择语句赋值
很多情况下,局部变量需要获取通过选择语句查询某个表后得到的字段值。
select @empId = max(empId) --查出的值赋给局部变量
最常用的脚本
use
declare
set
select
go
if
if…else…
while…
return
print
最常见的运算
算术:加減乘除,求余[即取模],
位运算:与,或,非,异或
比较运算
逻辑运算
and or not
between…and…
some,any,all
like
%,_,[],^
in
串连接
赋值
用EXECUTE执行动态命令
用SP_EXECUTESQL执行动态命令
约束
主键,外键,唯一
检查,唯一
默认值,规则[对象呢?]
非空?
SQLServer上的元数据
SQL Server 的系统表非常多,其中最常用的与元数据查询有关的表有如下一些:
syscolumns 存储每个表和视图中的每一列的信息以及存储过程中的每个参数的信息。
syscomments 存储包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的原始 SQL 文本语句。
sysconstraints 存储当前数据库中每一个约束的基本信息。
sysdatabases 存储当前服务器上每一个数据库的基本信息。
sysindexes 存储当前数据库中的每个索引的信息。
sysobjects 存储数据库内的每个对象(约束、默认值、日志、规则、存储过程等)的基本信息。
sysreferences 存储所有包括 FOREIGN KEY 约束的列。
systypes 存储系统提供的每种数据类型和用户定义数据类型的详细信息。
将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。
表的元数据包括你建表所包含的字段,字段名,字段数据类型,字段约束等.可以用下面的语句查:
SELECT cast((case when a.colorder=1 then d.name else ‘’ end) as varchar) 表名,
a.colorder 字段序号,
cast(a.name as varchar) 字段名,
(case when COLUMNPROPERTY( a.id,a.name,‘IsIdentity’)=1 then ‘√’else ‘’ end) 标识,
(case when COLUMNPROPERTY( a.id,a.name,‘IsIdentity’)=1 then convert(char(4),IDENT_SEED(d.name)) else ‘’ end)标识SEED,
(case when COLUMNPROPERTY( a.id,a.name,‘IsIdentity’)=1 then convert(char(4),IDENT_INCR(d.name)) else ‘’ end)标识INCR,
(case when (SELECT count(*) FROM sysobjects WHERE (name in
(SELECT name FROM sysindexes WHERE (id = a.id) AND (indid in
(SELECT indid FROM sysindexkeys WHERE (id = a.id) AND (colid in
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
AND (xtype = ‘PK’))>0 then ‘√’ else ‘’ end) 主键,
cast(b.name as varchar) 类型,
a.length 占用字节数,
COLUMNPROPERTY(a.id,a.name,‘PRECISION’) as 长度,
isnull(COLUMNPROPERTY(a.id,a.name,‘Scale’),0) as 小数位数,
(case when a.isnullable=1 then ‘√’else ‘’ end) 允许空,
cast(isnull(e.text,’’) as varchar) 默认值,
isnull(g.[value],’’) AS 字段说明
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype=‘U’ --and d.name <>‘dtproperties’
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id AND a.colid = g.smallid
where d.name = ‘customer’ --你查询的数据表名
order by a.id,a.colorder
–如果要查表的触发器可以用
select a.name 触发器,B.name 数据表 from sysobjects a,sysobjects b
where b.id=a.deltrig
and a.type=‘tr’ AND b.name=‘customer’ --你查询的数据表名
大多数表的元数据都可以通过系统表查询出来,楼主可以复习下sysobjects ,syscolumns ,sysindexes
等系统表字段的意思,想方便使用就将上面的语句定义成 查询表元数据的SQL函数就可以了。
示例:
1、 获得当前数据库所有用户表的名称。
SELECT OBJECT_NAME (id)
FROM sysobjects
WHERE xtype = ‘U’ AND OBJECTPROPERTY (id, ‘IsMSShipped’) = 0
其中主要用到了系统表 sysobjects以及其属性 xtype,还有就是用到了 OBJECTPROPERTY 系统函数来判断是不是安装 SQL Server 的过程中创建的对象。
2、获得指定表上所有的索引名称。
SELECT name FROM sysindexes
WHERE id = OBJECT_ID (‘mytable’) AND indid > 0
最后
以上就是美好睫毛为你收集整理的mssqlserver基础01的全部内容,希望文章能够帮你解决mssqlserver基础01所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复