189 8069 5689

sqlserver伪表,sqlserver伪表用法

SqlServer 中select 1语句可以查出来,oracle不行。怎么查?

oracle 有个内置的伪表,不能直接select 1,你可以这样写

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及门窗定制等,在成都网站建设网络营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

select 1 from dual

就可以了

SqlServer建表?

方法/步骤

打开SQL Server,在数据库处,右键数据库,点击新建数据库

请点击输入图片描述

然后,命名为LX,点击确定,创建数据库,如图所示

请点击输入图片描述

创建完,没有看到新建数据库的,在数据库那右键,刷新。如图所示就出来了

请点击输入图片描述

接着,找到LX数据库下的表,右键,新建表,如图所示

请点击输入图片描述

比如建立一个简单的部门表,简单部门表包含(部门编号、部门名),SQL Server 是可以用中文做列名的,但是为了能够被他人看懂,我们一般用英文,如图所示,DepertNo,DepertName,我喜欢在列名前加一个fld_,个人养成的一种习惯,看自己的习惯吧。因为我们有时候转换成英文,可能会与SQL的某些关键字起冲突,因此我加了个fld_。此外讲一下varchar为类型,10为长度,2个长度为1个汉字。

请点击输入图片描述

表设置主键,每个表只能有一个主键,右键表的最左侧,点击设置主键,最右边为空自动去勾,主键是不能为空的。一般部门号不会为空,部门名也是不会为空,所以也去掉勾,不允许为null。

请点击输入图片描述

输入好列后,右键标题,然后点击保存Table_1,如图所示,表名前我习惯加TBL_

请点击输入图片描述

如何利用SQLserver创建表

我们使用SQL Server的时候经常需要创建表,那么如何操作呢?下面我给大家分享一下。

工具/材料

SQL Server Managment

首先我们打开SQL Server Managment管理软件,选择一个数据库,如下图所示

接下来右键单击表,选择新建下面的表选项,如下图所示

然后设置一下表中的字段,如下图所示

最后按Ctrl+S进行表的保存,给表起一个名字即可,如下图所示

sqlserver的系统表

1、查看表和试图

SELECT * FROM sys.objects WHERE object_id = object_id('表名或视图名')

在sqlserver中一般可通过查询sys.objects系统表来得知结果,不过可以有更方便的方法

如下:

if object_id('tb_table') is not null

print 'exist'

else

print'not exist'

如上,可用object_id()来快速达到相同的目的,tb_table就是我将要创建的资源的名称,所以要先判断当前数据库中不存在相同的资源

object_id()可接受两个参数,第一个如上所示,代表资源的名称,上面的就是表的名字,但往往我们要说明我们所要创建的是什么类型的资源,

这样sql可以明确地在一种类型的资源中查找是否有重复的名字,如下:

if object_id('tb_table','u') is not null

print 'exist'

else

print'not exist'

第二个参数 "u" 就表示tb_table是用户创建的表,即:USER_TABLE地首字母简写

查询sys.objects中可得到各种资源的类型名称(TYPE列),这里之举几个主要的例子

u ----------- 用户创建的表,区别于系统表(USER_TABLE)

s ----------- 系统表(SYSTEM_TABLE)

v ----------- 视图(VIEW)

p ----------- 存储过程(SQL_STORED_PROCEDURE)

2、查看表的列名

select * from syscolumns where id=object_id('表名') and name='列名'

3、查看数据库

select * from sys.databases where name = 'student'

4、查看备份设备

"select * from sys.backup_devices where name ='backupdb'

(添加备份设备:exec sp_addumpdevice 'disk','backupdb','d:\\backup\\backupdb.bak')

5、查看数据文件

select name, physical_name dbfile from sys.master_files where database_id=db_id('student')

master数据库中sysdatabases表(是sqlserver中所有的数据库的库名) :

如果你要查询的是所有数据库(用户/系统):

select * from master..sysdatabases

如果你要查询的是用户数据库,则使用:

select * from master..sysdatabases where dbid 4

如果你要查询的是系统数据库,只需要把where字句改为dbid 4即可。

6、查看执行的sql语句

SELECT cacheobjtype,objtype,usecounts,sql

from sys.syscacheobjects where sql not like'%cach%' and sql not like '%sys.%'

2.对应数据库中sysobjects表(反应的是相应数据库中所有的对象):

这个表的用处是最大的,因为它里面存放的有:表(系统/用户)、存储过程(系统/用户)、视图、主键、外键等。

这里就不一一说明了。

比如你sqlserver中有个数据库名叫 test,如果要查询该数据库中的所有表对象:

select * from test..sysobjects where type = ’u’ or type = ’s’

这里的type = ’u’是表示用户表对象,type = ’s’是系统表对象,怎样单独查询用户表对象或者系统表对象就不用说了吧。

如果你要查询的是存储过程当然也分了系统和用户了:

这个是查询数据库中所有存储过程

select * from test..sysobjects where type = ’p’

如果你要查询的是用户存储过程则加上 and category 2 即可。

查询系统存储过程就不用说了吧(category = 2 谁不知道。。。)

查询视图与查询存储过程一样,比如:

你查询的是数据库中所有视图

select * from test..sysobjects where type = ’v’

如果你要查询的是用户视图则加上 and category 2 即可。

其他的就不说了,就把 它们的type给大家说下:

type = ’ pk’ 表示主键。

type = ’ d’ 外键引用。

type = ’uq’ 唯一索引。

下面附录一些常用系统表

名称 地址 说明

sysaltfiles 主数据库 保存数据库的文件

syscharsets 主数据库 字符集与排序顺序

sysconfigures 主数据库 配置选项

syscurconfigs 主数据库 当前配置选项

sysdatabases 主数据库 服务器中的数据库

syslanguages 主数据库 语言

syslogins 主数据库 登陆帐号信息

sysoledbusers 主数据库 链接服务器登陆信息

sysprocesses 主数据库 进程

sysremotelogins主数据库 远程登录帐号

syscolumns 每个数据库 列

sysconstrains 每个数据库 限制

sysfilegroups 每个数据库 文件组

sysfiles 每个数据库 文件

sysforeignkeys 每个数据库 外部关键字

sysindexs 每个数据库 索引

sysmenbers 每个数据库 角色成员

sysobjects 每个数据库 所有数据库对象

syspermissions 每个数据库 权限

systypes 每个数据库 用户定义数据类型

sysusers 每个数据库 用户

sqlserver锁表机制

这个问题要具体分析:

第一,事务隔离级别基本两种模式,一种是阻塞式(read committed,repeatable read,serializable)

,一种是非阻塞式(read uncommitted,snapshot)。

默认是read committed,这种情况一般在更新表的时候,如果不使用hint 提示,基本是先对表添加IX锁,级别不算高,基本和其他锁兼容,但是repeatable read,serializable 事务隔离级别就会先对表添加IX锁,然后向X锁转化,而X锁和大多数锁都不兼容,容易发生表阻塞。

第二种隔离级别不会有以上问题,但是又引入了其它的问题。

以上是一种情况。

另外一种就是 锁升级,一个锁是96B内存,如果太多,sqlserver就会升级为表锁,一般是5000以上行级锁就升级为一个表X锁。

所以适当的文件分组和表分区 是有必要的。

其次就是资源互相引用导致事务长时间不能释放,导致真正的死锁,不过SQL2005以后,这种情况发生的概率很低。

留个问题你自己去想。

两个SQL,两个连接,同时执行。

update A set A.NAME=xxx where A.id=55

update A set A.NAME=xxx where A.id=56, 如果 56 不存在你说会发生什么情况呢?


文章名称:sqlserver伪表,sqlserver伪表用法
链接地址:http://cdxtjz.com/article/dssesjo.html

其他资讯