文档库 最新最全的文档下载
当前位置:文档库 › 用sql语句dbcc log 查看SQL Server 数据库事务日志

用sql语句dbcc log 查看SQL Server 数据库事务日志

用sql语句dbcc log 查看SQL Server 数据库事务日志
用sql语句dbcc log 查看SQL Server 数据库事务日志

用sql语句dbcc log 查看SQL Server 数据库的事务日志

1)用系统函数

select * from fn_dblog(null,null)

2)用DBCC

dbcc log(dbname,4) --(n=0,1,2,3,4)

1 - 更多信息plus flags, tags, row length

2 - 非常详细的信息plus object name, index name,page id, slot id

3 - 每种操作的全部信息

4 - 每种操作的全部信息加上该事务的16进制信息

默认 type = 0

要查看MSATER数据库的事务日志可以用以下命令:

DBCC log (master)

一直以来我都很困惑,不知道怎么解析SQL SERVER的日志,

因为微软提供了fn_dblog(NULL,NULL)与DBCC LOG获取数据库日志的基本信息,但是都是二进制码,看不懂。最近终于成功解析了SQL SERVER LOG信息

在fn_dblog(NULL,NULL)输出结果中,

获取表名是AllocUnitName字段。

具体获取方法:AllocUnitName like 'dbo.TEST%'

操作类型是:Operation

数据是:[RowLog Contents 0]字段内容

如果是UPDATE操作:修改后数据存放在[RowLog Contents 1]字段内

最基本3种操作类型:'LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW' 具体解析代码如下:

--解析日志

create function dbo.f_splitBinary(@s varbinary(8000))

returns @t table(id int identity(1,1),Value binary(1))

as

begin

declare @i int,@im int

select @i=1,@im=datalength(@s)

while @i<=@im

begin

insert into @t select substring(@s,@i,1)

set @i=@i+1

end

return

end

GO

create function dbo.f_reverseBinary(@s varbinary(128))

returns varbinary(128)

as

begin

declare @r varbinary(128)

set @r=0x

select @r=@r+Value from dbo.f_splitBinary(@s) a order by id desc

return @r

end

GO

create proc [dbo].[p_getLog](@TableName sysname,@c int=100)

/*

解析日志

: p_getLog 'tablename';

*/

as

set nocount on

declare @s varbinary(8000),@s1 varbinary(8000),@str varchar(8000),@str1

varchar(8000),@lb int,@le int,@operation varchar(128)

declare @i int,@lib int,@lie int,@ib int,@ie int,@lenVar int,@columnname sysname,@length int,@columntype varchar(32),@prec int,@scale int

declare @TUVLength int,@vc int,@tc int,@bitAdd int,@bitCount int,@count int

select https://www.wendangku.net/doc/6516633331.html,,b.length,https://www.wendangku.net/doc/6516633331.html, typename,b.colid,b.xprec,b.xscale,

case when https://www.wendangku.net/doc/6516633331.html, not like '%var%' and https://www.wendangku.net/doc/6516633331.html, not in ('xml','text','image') then 1 else 2 end p,row_number() over(partition by

case when https://www.wendangku.net/doc/6516633331.html, not like '%var%' and https://www.wendangku.net/doc/6516633331.html, not in ('xml','text','image') then 1 else 2 end order by colid) pid

into #t

from sysobjects a inner join syscolumns b on a.id=b.id inner join systypes c on b.xtype=c.xusertype

https://www.wendangku.net/doc/6516633331.html,=@TableNameorder by b.colid

SELECT top(@c) Operation,[RowLog Contents 0],[RowLog Contents 1],[RowLog Contents 2],[RowLog Contents 3],[Log Record],id=identity(int,1,1) into #t1

from::fn_dblog (null, null)

where AllocUnitName like'dbo.'+@TableName+'%'and

Operation in('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW' )

AND Context not in ('LCX_IAM','LCX_PFS')

order by [Current LSN] desc

select @tc=count(*) from #t

select @lb=min(id),@le=max(id) from #t1

while @lb<=@le

begin

select @operation=Operation,@s=[RowLog Contents 0],@s1=[RowLog Contents 1] from #t1 whereid=@lbAND [RowLog Contents 1] IS NOT NULL

set @TUVLength=convert(int,dbo.f_reverseBinary(substring(@s,3,2)))+3

select @i=5,@str='',@vc=0,@bitCount=0

select @lib=min(pid),@lie=max(pid) from #t where p=1

while @lib<=@lie

begin

select

@columnname=name,@length=length,@columntype=typename,@prec=xprec,@scale=xscale, @vc=colid-1 from #t where p=1 andpid=@lib

-- if @columntype<>'bit'

-- print rtrim(@i)+'->'+rtrim(@length)

if dbo.f_reverseBinary(substring(@s,@TUVLength,1+((@tc-1)/8))) & power(2,@vc) <> 0

begin

if @columntype<>'bit'

select

@str=@str+@columnname+'=NULL,',@i=@i+@length

else

begin

select @str=@str+@columnname+'=NULL,'

set @bitAdd = case when @bitCount=0 then @i else @bitAdd end

set @bitCount = (@bitCount + 1)%8

set @i=@i+case @bitCount when 1 then 1 else 0 end -- print rtrim(@bitAdd)+'->'+rtrim(@length)

end

end

else if @columntype='char'

select

@str=@str+@columnname+'='+convert(varchar(256),substring(@s,@i,@length))+',',@i =@i+@length

else if @columntype='nchar'

select

@str=@str+@columnname+'='+convert(nvarchar(256),substring(@s,@i,@length))+',',@ i=@i+@length

else if @columntype='datetime'

select

@str=@str+@columnname+'='+convert(varchar,dateadd(second,convert(int,dbo.f_reve rseBinary(substring(@s,@i,4)))/300

,dateadd(day,convert(int,dbo.f_reverseBinary(sub string(@s,@i+4,4))),'1900-01-01')),120)+',',@i=@i+8

else if @columntype='smalldatetime'

select

@str=@str+@columnname+'='+convert(varchar,dateadd(minute,convert(int,dbo.f_reve rseBinary(substring(@s,@i,2)))

,dateadd(day,convert(int,dbo.f_reverseBinary(sub string(@s,@i+2,2))),'1900-01-01')),120)+',',@i=@i+4

else if @columntype='int'

select

@str=@str+@columnname+'='+rtrim(convert(int,dbo.f_reverseBinary(substring(@s,@i ,4))))+',',@i=@i+4

else if @columntype='decimal'

select @str=@str+@columnname+'=DECIMAL,',@i=@i+@length else if @columntype='bit'

begin

set @bitAdd = case when @bitCount=0 then @i else @bitAdd end

set @bitCount = (@bitCount + 1)%8

select

@str=@str+@columnname+'='+rtrim(convert(bit,substring(@s,@bitAdd,1)&power(2,cas

e @bitCount when 0 then 8 else @bitCount end-1)))+','

,@i=@i+case @bitCount when 1 then 1 else 0 end -- print rtrim(@bitAdd)+'->'+rtrim(@length)

end

set @lib=@lib+1

end

set @i=convert(int,dbo.f_reverseBinary(substring(@s,3,2)))+4+((@tc-1)/8) set @lenVar=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))

set @i=@i+2

set @ib=@i + @lenVar*2

set @ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))

set @count=0

select @lib=min(pid),@lie=max(pid) from #t where p=2

while @lib<=@lie

begin

-- print rtrim(@ib)+'->'+rtrim(@ie)

select

@columnname=name,@length=length,@columntype=typename,@vc=colid-1 from #t where p=2 andpid=@lib

if dbo.f_reverseBinary(substring(@s,@TUVLength,1+((@tc-1)/8))) & power(2,@vc) <> 0

begin

select @str=@str+@columnname+'=NULL,'

select @ib=@ie+1,@i=@i+2

if @count<@lenVar

set

@ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))

end

else if @columntype='varchar'

begin

select

@str=@str+@columnname+'='+convert(varchar(256),substring(@s,@ib,@ie-@ib+1))+','

select @ib=@ie+1,@i=@i+2

set

@ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))

end

else if @columntype='nvarchar'

begin

select

@str=@str+@columnname+'='+convert(nvarchar(256),substring(@s,@ib,@ie-@ib+1))+', '

select @ib=@ie+1,@i=@i+2

set

@ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))

end

set @count=@count+1

set @lib=@lib+1

end

set @str=left(@str,len(@str)-1)

IF @operation ='LOP_MODIFY_ROW'

BEGIN

set

@TUVLength=convert(int,dbo.f_reverseBinary(substring(@s1,3,2)))+3 select @i=5,@str1='',@vc=0,@bitCount=0

select @lib=min(pid),@lie=max(pid) from #t where p=1

while @lib<=@lie

begin

select

@columnname=name,@length=length,@columntype=typename,@prec=xprec,@scale=xscale, @vc=colid-1 from #t where p=1 andpid=@lib

-- if @columntype<>'bit'

-- print rtrim(@i)+'->'+rtrim(@length)

if dbo.f_reverseBinary(substring(@s1,@TUVLength,1+((@tc-1)/8))) & power(2,@vc) <> 0

begin

if @columntype<>'bit'

select @str1=@str1+@columnname+'=NULL,',@i=@i+@length

else

begin

select @str1=@str1+@columnname+'=NULL,'

set @bitAdd = case when @bitCount=0 then @i else @bitAdd end

set @bitCount = (@bitCount + 1)%8

set @i=@i+case @bitCount when 1 then 1 else 0 end

-- print rtrim(@bitAdd)+'->'+rtrim(@length) end

end

else if @columntype='char'

select

@str1=@str1+@columnname+'='+convert(varchar(256),substring(@s1,@i,@length))+',' ,@i=@i+@length

else if @columntype='nchar'

select

@str1=@str1+@columnname+'='+convert(nvarchar(256),substring(@s1,@i,@length))+', ',@i=@i+@length

else if @columntype='datetime'

select

@str1=@str1+@columnname+'='+convert(varchar,dateadd(second,convert(int,dbo.f_re verseBinary(substring(@s1,@i,4)))/300

,dateadd(day,convert(int,dbo.f_reverseBinary(substring(@s1,@i+4,4))) ,'1900-01-01')),120)+',',@i=@i+8

else if @columntype='smalldatetime'

select

@str1=@str1+@columnname+'='+convert(varchar,dateadd(minute,convert(int,dbo.f_re verseBinary(substring(@s1,@i,2)))

,dateadd(day,convert(int,dbo.f_reverseBinary(substring(@s1,@i+2,2))) ,'1900-01-01')),120)+',',@i=@i+4

else if @columntype='int'

select

@str1=@str1+@columnname+'='+rtrim(convert(int,dbo.f_reverseBinary(substring(@s1 ,@i,4))))+',',@i=@i+4

else if @columntype='decimal'

select @str1=@str1+@columnname+'=DECIMAL,',@i=@i+@length

else if @columntype='bit'

begin

set @bitAdd = case when @bitCount=0 then @i else @bitAdd end

set @bitCount = (@bitCount + 1)%8

select

@str1=@str1+@columnname+'='+rtrim(convert(bit,substring(@s1,@bitAdd,1)&power(2, case @bitCount when 0 then 8 else @bitCount end-1)))+','

,@i=@i+case @bitCount when 1 then 1 else 0 end

-- print rtrim(@bitAdd)+'->'+rtrim(@length) end

set @lib=@lib+1

end

set @i=convert(int,dbo.f_reverseBinary(substring(@s1,3,2)))+4+((@tc-1)/8) set @lenVar=convert(int,dbo.f_reverseBinary(substring(@s1,@i,2)))

set @i=@i+2

set @ib=@i + @lenVar*2

set @ie=convert(int,dbo.f_reverseBinary(substring(@s1,@i,2)))

set @count=0

select @lib=min(pid),@lie=max(pid) from #t where p=2

while @lib<=@lie

begin

-- print rtrim(@ib)+'->'+rtrim(@ie)

select @columnname=name,@length=length,@columntype=typename,@vc=colid-1 from #t where p=2 andpid=@lib

if dbo.f_reverseBinary(substring(@s1,@TUVLength,1+((@tc-1)/8))) & power(2,@vc) <> 0

begin

select @str1=@str1+@columnname+'=NULL,'

select @ib=@ie+1,@i=@i+2

if @count<@lenVar

set @ie=convert(int,dbo.f_reverseBinary(substring(@s1,@i,2))) end

else if @columntype='varchar'

begin

select

@str1=@str1+@columnname+'='+convert(varchar(256),substring(@s1,@ib,@ie-@ib+1))+ ','

select @ib=@ie+1,@i=@i+2

set @ie=convert(int,dbo.f_reverseBinary(substring(@s1,@i,2)))

end

else if @columntype='nvarchar'

begin

select

@str1=@str1+@columnname+'='+convert(nvarchar(256),substring(@s1,@ib,@ie-@ib+1)) +','

select @ib=@ie+1,@i=@i+2

set @ie=convert(int,dbo.f_reverseBinary(substring(@s1,@i,2)))

end

set @count=@count+1

set @lib=@lib+1

end

set @str1=left(@str1,len(@str1)-1)

END

IF @operation ='LOP_MODIFY_ROW'

BEGIN

print @operation+'修改前值:'+@str

print @operation+'修改后值:'+@str1

END

ELSE

BEGIN

print @operation+':'+@str

END

set @lb=@lb+1

END

drop table #t,#t1

GO

因为目前解析SQL 2008会有很多错误,要是认识微软引擎组的人就好了!

SQLServer(多语句表值函数代码)

SQLServer(多语句表值函数代码) 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[ufnGetContactInformation](@ContactID int) RETURNS @retContactInformation TABLE ( -- Columns returned by the function [ContactID] int PRIMARY KEY NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [JobTitle] [nvarchar](50) NULL, [ContactType] [nvarchar](50) NULL ) AS -- Returns the first name, last name, job title and contact type for the specified contact. BEGIN

DECLARE @FirstName [nvarchar](50), @LastName [nvarchar](50), @JobTitle [nvarchar](50), @ContactType [nvarchar](50); -- Get common contact information SELECT @ContactID = ContactID, @FirstName = FirstName, @LastName = LastName FROM [Person].[Contact] WHERE [ContactID] = @ContactID; SET @JobTitle = CASE -- Check for employee WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e WHERE e.[ContactID] = @ContactID) THEN (SELECT [Title] FROM [HumanResources].[Employee] WHERE [ContactID] = @ContactID) -- Check for vendor

数据库技术(SQLServer)习题与参考答案

数据库技术(SQLServer)习题与参考答案 第一章: 1、SQL Server 2005有哪些新增特性? 答:SQL Server 2005的新特性主要体现在企业数据管理、开发人员生产力、商务智能三个方面。企业数据管理体现在高可用性、管理工具、安全性与可伸缩性;开发人员生产力体现在Common Language Runtime集成、集成XML、Transact-SQL增强与SQL服务代理;商务智能体现在分析服务、数据转换服务、报表服务与数据挖掘。 2、SQL Server 2005安装的软件与硬件环境就是什么? 答:SQL Server 2005安装的软件与硬件环境参见教材6。 3、SQL Server 2005有哪些版本?有哪些服务组件? 答:SQL Server 2005包括企业版、标准版、工作组版、开发版与简易版五个版本,服务组件主要有SQL Server 数据库引擎、Analysis Services、Reporting Services、Notification Services、Integration Services等。 4、什么就是实例?经常提到的SQL Server 2005服务器与服务器实例就是否具有相同的含义? 答:实例就就是SQL服务器引擎,每个SQL Server数据库引擎实例各有一套不为其她实例共享的系统及用户数据库。一个SQL Server服务器就就是一个实例,一台计算机上,可以安装多个SQL SERVER,每个SQL SERVER就可以理解为就是一个实例。 5、默认实例与命名实例有何差别?在安装与使用上有何不同? 答:实例又分为“默认实例”与“命名实例”,如果在一台计算机上安装第一个SQL SERVER 2005命名设置保持默认的话,那这个实例就就是默认实例。一台计算机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同。除默认实例外,所有数据库引擎实例都由安装该实例的过程中指定的实例名标识。 6、SQL Server 2005的安全性验证分为哪两个阶段? 答:第1个阶段就是身份验证,验证用户就是否具有“连接权”;第2个阶段就是数据库的访问权,验证连接到服务器实例的用户,即已登录到服务器实例的用户,就是否具有“访问权”。 7、SQL Server 2005有哪些主要的实用工具?每个工具都有什么用途? 答:SQL Server Management Studio,就是Microsoft SQL Server 2005中的新组件,这就是一个用于访问、配置、管理与开发SQL Server的所有组件的集成环境,就是SQL Server 2005中最重要的管理工具。SQL Server Configuration Manager,用来管理SQL Server 2005所

数据库SQL查询语句大全

经典SQL查询语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tab name(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

SQLSERVER操作命令

SQLSERVER数据库操作 ******操作前,请确定SQL的服务已经开启******** 一:登录进入sql数据库 1、开始---所有程序---Microsoft SQL Server 2005---SQL Server Management Studio Express 2、此时出现“连接到服务器”的对话框, “服务器名称”设置为SQL数据库所在机器的IP地址 “身份验证”设置为SQL Server身份验证或者Windows 身份验证 填写登录名和密码后,点击“连接”按钮,即可进入到SQL数据库操作界面。 二:新建数据库 登录进去后,右击“数据库”,选择—“新建数据库” 设置数据库名称,在下面的选项卡中还可以设置数据库的初始大小,自动增长,路径。 点击确定,一个数据库就建好了。 三:如何备份的数据库文件。 登录进入后,右击相应的需要备份数据库----选择“任务” 目标下的备份到,点击“添加”按钮可以设置备份数据库保存的路径。 四:如何还原备份的数据库文件。(以本地机器为例子) 1、设置服务器名称,点击右边的下拉框的三角,选择“浏览更多…”。 此时出现查找服务器对话框,选择“本地服务器”---点开“数据库引擎”前面 的三角---选中出现的服务器名称—确定。 (注:可以在“网络服务器”选项卡中设置网络服务器) 2、设置身份验证,选择为“windows身份验证” 3、点击连接按钮,进入数据库管理页面 4、右击“数据库”,选择“还原数据库”,出现还原数据库的对话框 还原的目标----目标数据库,这里设置数据库的名字 还原的源----选择“源设备”,在弹出的对话框中点击“添加”按钮,找到所备 份的数据库文件,确定。 5、此时,在还原数据库对话框中会出现所还原的数据库的信息。在前面选中所需还 原的数据库。确定。 6、为刚刚还原的数据库设置相应的用户。 a点开“安全性”---右击“登录名”---新建登录名 b 设置登录名(假如为admin),并设置为SQL Server身份验证,输入密码,去除 “强制实施密码策略”前的勾。 C 找到导入的数据库,右击此数据库----选择“属性”,在选择页中,点击“文件” 设置所有者,点击右边的按钮,选择“浏览”,找到相应的用户(如admin)。确 定。。 7、此时重新以admin的身份进入,就可操作相应的数据库。

数据库技术(SQLServer)习题与

数据库技术(SQLServer)习题与参考答案. 数据库技术(SQLServer)习题与参考答案 第一章: 1、SQL Server 2005有哪些新增特性? 答:SQL Server 2005的新特性主要体现在企业

数据管理、开发人员生产力、商务智能三个方面。企业数据管理体现在高可用性、管理工具、安全性和可伸缩性;开发人员生产力体现在Common Language Runtime集成、集成XML、Transact-SQL增强和SQL服务代理;商务智能体现在分析服务、数据转换服务、报表服务和数据挖掘。 2、SQL Server 2005安装的软件和硬件环境是什么?

答:SQL Server 2005安装的软件和硬件环境参见教材6。 3、SQL Server 2005有哪些版本?有哪些服务组件? 答:SQL Server 2005包括企业版、标准版、工作组版、开发版和简易版五个版本,服务组件主要有SQL Server 数据库引擎、Analysis Services、Reporting Services、Notification Services、Integration Services等。SQL Server 2005、什么是实例?经常提到的4. 服务器和服务器实例是否具有相同的含义? 答:实例就是SQL服务器引擎,每个SQL Server数据库引擎实例各有一套不为其他实例共享的

系统及用户数据库。一个SQL Server服务 器就是一个实例,一台计算机上,可以安装多个SQL SERVER,每个SQL SERVER就可以理解为是 一个实例。 5、默认实例和命名实例有何差别?在安装 和使用上有何不同? 答:实例又分为“默认实例”和“命名实例”,如果在一台计算机上安装第一个SQL SERVER 2005命名设置保持默认的话,那这个实例就

数据库SQL查询语句大全修订稿

数据库S Q L查询语句 大全 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

经典SQL查询语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definitio n only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A:UNION 运算符

SQL数据库查询语句范例

推荐一、简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。Select nickname,email FROM testtable Where n ame=’张三’ (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 1、选择所有列例如,下面语句显示testtable表中所有列的数据:Select * FROM testtable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如:Select nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名列名列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: Select 昵称=nickname,电子邮件=email FROM testtable 4、删除重复行 Select语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINC T选项时,对于所有重复的数据行在Select返回的结果集合中只保留一行。 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。例如: Select TOP 2 *FROM testtable Select TOP 20 PERCENT * FROM testtable (二) FROM子句 FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和cityta ble表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定: Select username,citytable.cityid FROM usertable,citytable Where usertable.cityid=citytable.cityid 在FROM子句中可用以下两种格式为表或视图指定别名: 表名 as 别名表名别名

SqlServer存储过程基本语法

动态语句基本语法 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesqlN'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fnamevarchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fnamevarchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @numint, @sqlsnvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @numint, @sqlsnvarchar(4000) set @sqls='select @a=count(*) from tableName ' execsp_executesql @sqls,N'@aint output',@num output select @num 1 :普通SQL语句可以用Exec执行例: Select * from tableName Exec('select * from tableName')

数据库应用技术SQLServer篇第版

数据库应用技术——SQL Server 篇(第2版) 第 1 章数据库概述 1 1.1 订单管理系统概述 1 1.2 数据库基本原理 2 1.2.1 关系数据库系统概述 2 1.2.2 实体- 联系模型 2 1.2.3 关系模型 4 1.2.4 关系数据库标准语言 8 1.2.5 关系模型的规范化 9 习题11 第 2 章SQL Server 概述12 2.1 SQL Server 简介12 2.1.1 SQL Server 的发展及特性12 2.1.2 SQL Server 的环境要求13 2.2 SQL Server 的安装15 2.2.1 SQL Server 的应用环境设计15 2.2.2 SQL Server 的身份验证模式16 2.2.3 SQL Server 的安装17 2.3 SQL Server 的管理及开发工具21

习题28

45 第 3 章 数据库管理 29 3.1 SQL Server 数据库概念 29 3.1.1 数据库文件分类 29 3.1.2 页 30 3.1.3 数据库文件组 31 3.2 系统数据库及其表 32 3.3 创立数据库 33 3.3.1 创立数据库应具备的条件 33 3.3.2 在图形界面下创立数据库 34 3.3.3 用SQL 命令创立数据库 35 3.3.4 事务日志 38 3.3.5 查看数据库信息 39 3.4 管理和维护数据库 40 3.4.1 打开数据库 41 3.4.2 增减数据库空间 41 3.4.3 数据库选项的设定与修改 44 3.4.4 更改数据库名称 45 3.4.5 查看 SQL Server 上共有几个数据库 3.4.6 删除数据库 45 习题 46

数据库sql查询语句上机练习1_习题_结果(单世民)

习题1 请根据给出的数据库表结构来回答相应问题: DEPT (DEPTNO INT, DNAME VARCHAR(14),LOC VARCHAR(13)); EMP (EMPNO INT,ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT, HIREDATE DATE, SAL FLOAT, COMM FLOAT, DEPTNO INT); BONUS (ENAME VARCHAR(10), JOB VARCHAR(9), SAL INT, COMM INT); SALGRADE ( GRADE INT, LOSAL INT, HISAL INT); 其中表中包含如下数据: DEPT表: EMP表: SALGRADE表:

BONUS表: 无数据 根据上面描述完成下面问题: (注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原) DDL 1. 写出上述表的建表语句。此外,在DEPT上创 建名为”PK_DEPT”的主键约束,在EMP表上 创建名为”PK_EMP”的主键约束以及指向表 DEPT的外键约束”FK_DEPTNO”。 命令: Create table DEPT (DEPTNO INT NOT NULL,DNAME VARCHAR(14),LOC VARCHAR(13)); Alter table DEPT add constraint PK_DEPT PRIMARY KEY (DEPTNO); create table EMP(EMPNO INT NOT NULL,ENAME VARCHAR(10),JOB VARCHAR(9),MGR INT,HIREDATE DATE, SAL FLOAT,COMM FLOAT,DEPTNO INT); alter table EMP add constraint PK_EMP PRIMARY KEY (EMPNO); alter table EMP add constraint FK_DEPTNO foreign key(DEPTNO) references DEPT(DEPTNO);

SQLSERVER数据库、表的创建及SQL语句命令

SQLSERVER数据库、表的创建及SQL语句命令 SQLSERVER数据库,安装、备份、还原等问题: 一、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了 2、sql server服务启动失败,解决方法: 进入sql server configure manager,点开Sql server 网络配置(非sql native client 配置),点sqlzhh(我sqlserver 的名字)协议,将VIA协议禁用。再启动Sql Server服务,成功 如图: 二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。 解决方法:

1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。 三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。 解决方法: 选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。

四、查看数据库版本的命令:select @@version 在数据库中,点击“新建查询”,然后输入命令,执行结果如下 五、数据库定义及操作命令: 按照数据结构来组织、存储和管理数据的仓库。由表、关系以及操作对象组成,把数据存放在数据表中。 1、修改数据库密码的命令: EXEC sp_password NULL, '你的新密码', 'sa' sp_password Null,'sa','sa'

sqlserver常用函数

Sql Server 常用函数 1,统计函数avg, count, max, min, sum 2, 3,多数聚会不统计值为null的行。可以与distinct一起使用去掉重复的行。可以与group by 来分组4, 5, 2,数学函数 6, 7, SQRT 8, ceiling(n) 返回大于或者等于n的最小整数 9, floor(n), 返回小于或者是等于n的最大整数 10,round(m,n), 四舍五入,n是保留小数的位数 11,abs(n) 12,sign(n), 当n>0, 返回1,n=0,返回0,n<0, 返回-1 13,PI(), 3.1415.... 14,rand(),rand(n), 返回0-1之间的一个随机数 15,3,字符串函数 16, 17,ascii(), 将字符转换为ASCII码, ASCII('abc') = 97 18,char(), ASCII 码转换为字符 19,low(),upper() 20,str(a,b,c)转换数字为字符串。a,是要转换的字符串。b是转换以后的长度,c是小数位数。 str(123.456,8,2) = 123.46 21,ltrim(), rtrim() 去空格 22,left(n), right(n), substring(str, start,length) 截取字符串 23,charindex(子串,母串),查找是否包含。返回第一次出现的位置,没有返回0 24,patindex('%pattern%', expression) 功能同上,可是使用通配符 25,replicate('char', rep_time), 重复字符串 26,reverse(char),颠倒字符串 27,replace(str, strold, strnew) 替换字符串 28,space(n), 产生n个空行 29,stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是开始位置,3是要从原来串中删除的字符长度,ijlmn是要插入的字符串。 30,3,类型转换函数: 31, 32,cast, cast( expression as data_type), Example: 33,SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' 34,convert(data_type, expression) 35,4,日期函数 36, 37,day(), month(), year() 38,dateadd(datepart, number, date), datapart指定对那一部分加,number知道加多少,date指定在谁的基础上加。datepart的取值包括,

SQLServer数据库期末复习试题试卷及答案

现有关系数据库如下: 数据库名:教学数据库(Teacher) 教师信息表(教师编号,姓名,性别,民族,职称,身份证号) 课程信息表(课程号,课程名,标准课时数) 任课信息表(教师编号,课程号,实际课时数) 一、用SQL语言实现下列功能 1.创建数据库。 要求:数据库名为Teacher,主数据文件名为Teacher_data.MDF,存放在C:\目录下,初始值大小为2MB,增长方式为按照10%的比例增长;日志文件名为Teacher_log.LDF,存放在C:\目录下,初始值大小为1MB,增长方式为按照1MB的增量增长。 2.创建教师信息表Teacherinfo,数据表的各字段属性如下表所示: 列名数据类型长度属性描述 Teacher_Id char 6 主键教师编号 Teacher_Name nvarchar 8 不允许空姓名 Sex nchar 2 检查(男/女) 性别 Birth_Place nvarchar 20 默认值(汉族) 民族 Zhicheng nvarchar 20 不允许空职称 H_Id char 16 唯一身份证号 3.创建课程信息表Courseinfo,数据表的各字段属性如下表所示: 列名数据类型长度属性描述 Course_Id char 5 主键课程号 Course_Name nvarchar 20 不允许空课程名 B_Hours Int 检查(0~200)标准课时数 4.创建任课信息表TCinfo,数据表的各字段属性如下表所示: 列名数据类型长度属性描述 Id int 自动编号 Teacher_Id char 6 外键教师编号 Course_Id char 5 外键课程号 S_Hours Int 实际课时数 5.将下列课程信息添加到课程表中: 课号课程名称课时数 30001 SQL Server数据库 90 30002 数据结构 60 30003 VB程序设计 72

数据库sql查询语句练习2_习题_结果(单世民)

现在有一教学管理系统,具体的关系模式如下:Student (no, name, sex, birthday, class) Teacher (no, name, sex, birthday, prof, depart) Course (cno, cname, tno) Score (no, cno, degree) 其中表中包含如下数据: Course表: Score表: Student表:

Teacher表: 根据上面描述完成下面问题: (注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)DDL 1.写出上述表的建表语句。 2.给出相应的INSERT语句来完成题中给出数据的插入。 单表查询 3.以class降序输出student的所有记录(student表全部属性) 命令:select*from Student order by class desc;

4.列出教师所在的单位depart(不重复)。 命令:select distinct depart from Teacher; 5.列出student表中所有记录的name、sex和class列 命令:select name,sex,class from Student; 6.输出student中不姓王的同学的姓名。 命令:select name from Student except select name from Student where name like'王%';或

select name from Student where name not like'王%'; 7.输出成绩为85或86或88或在60-80之间的记录(no,cno,degree) 命令:select no,cno,DEGREE from Score where degree=85 or degree=86 or degree=88 or degree between 60 and 80; 8.输出班级为95001或性别为‘女’的同学(student表全部属性) 命令:select*from Student where class=95001 or sex='女';

SQLSERVER函数大全

SQL SERVER函数大全 SQL SERVER命令大全 SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16

SQLServer语句优化

SQLServer语句优化 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。 需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。 下面的表总结了何时使用聚集索引或非聚集索引(很重要): 动作描述使用聚集索引使用非聚集索引 列经常被分组排序应应 返回某范围内的数据应不应 一个或极少不同值不应不应 小数目的不同值应不应 大数目的不同值不应应 频繁更新的列不应应 外键列应应 主键列应应 频繁修改索引列不应应 事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。 结合实际,谈索引使用的误区 理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。 1、主键就是聚集索引 这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。 显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。 从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会

数据库SQL查询语句练习题

设教学数据库Education有三个关系: 学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学习关系SC(SNO,CNO,GRADE);课程关系C(CNO,CNAME,CDEPT,TNAME)查询问题: (1)检索计算机系的全体学生的学号,姓名和性别; (2)检索学习课程号为C2的学生学号与姓名; (3)检索选修课程名为“DS”的学生学号与姓名; (4)检索选修课程号为C2或C4的学生学号; (5)检索至少选修课程号为C2和C4的学生学号; (6)检索不学C2课的学生姓名和年龄; (7)检索学习全部课程的学生姓名; (8)查询所学课程包含学生S3所学课程的学生学号。 (1)检索计算机系的全体学生的学号,姓名和性别; SELECT Sno,Sname,Sex FROM S WHERE Sdept ='CS'; (2)检索学习课程号为C2的学生学号与姓名; Sname ,1.SELECT SnoSname ,2.SELECT S.SnoFROM S SC , FROM SWHERE Sno IN WHERE S.Sno=SC.Sno SELECT Sno (;C2'AND https://www.wendangku.net/doc/6516633331.html,o=‘ FROM SC )‘C2' WHERE Cno= DS)检索选修课程名为“”的学生学号与姓名(3表建立它们二者的表没有直接联系,必须通过SC表中,但S和C 本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C S SC →联系。 C →基本思路: Cno;表中找出“DS”课程的课程号(1)首先在C ;Cno 集合中的某个元素Cno2)然后在SC表中找出Cno等于第一步给出的(送入结果表列。和SnameSno等于第二步中Sno 集合中某个元素的元组,取出Sno S(3)最后在关系中选出Sname ,SELECT SnoFROM S WHERE Sno IN SELECT Sno ( FROM SC WHERE Cno IN SELECT Cno ( FROM C );DS') WHERE Cname=‘ 的学生学号;C2或C4(4)检索选修课程号为SELECT Sno FROM SC ';'C2 OR Cno=‘C4WHERE Cno=‘

数据库技术(SQLServer)习题与参考答案电子教案

数据库技术(SQLServer)习题与参考答案 第一章: 1、SQL Server 2005有哪些新增特性? 答:SQL Server 2005的新特性主要体现在企业数据管理、开发人员生产力、商务智能三个方面。企业数据管理体现在高可用性、管理工具、安全性和可伸缩性;开发人员生产力体现在Common Language Runtime集成、集成XML、Transact-SQL增强和SQL服务代理;商务智能体现在分析服务、数据转换服务、报表服务和数据挖掘。 2、SQL Server 2005安装的软件和硬件环境是什么? 答:SQL Server 2005安装的软件和硬件环境参见教材6。 3、SQL Server 2005有哪些版本?有哪些服务组件? 答:SQL Server 2005包括企业版、标准版、工作组版、开发版和简易版五个版本,服务组件主要有SQL Server 数据库引擎、Analysis Services、Reporting Services、Notification Services、Integration Services等。 4、什么是实例?经常提到的SQL Server 2005服务器和服务器实例是否具有相同的含义?答:实例就是SQL服务器引擎,每个SQL Server数据库引擎实例各有一套不为其他实例共享的系统及用户数据库。一个SQL Server服务器就是一个实例,一台计算机上,可以安装多个SQL SERVER,每个SQL SERVER就可以理解为是一个实例。 5、默认实例和命名实例有何差别?在安装和使用上有何不同? 答:实例又分为“默认实例”和“命名实例”,如果在一台计算机上安装第一个SQL SERVER 2005命名设置保持默认的话,那这个实例就是默认实例。一台计算机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同。除默认实例外,所有数据库引擎实例都由安装该实例的过程中指定的实例名标识。 6、SQL Server 2005的安全性验证分为哪两个阶段? 答:第1个阶段是身份验证,验证用户是否具有“连接权”;第2个阶段是数据库的访问权,验证连接到服务器实例的用户,即已登录到服务器实例的用户,是否具有“访问权”。 7、SQL Server 2005有哪些主要的实用工具?每个工具都有什么用途? 答:SQL Server Management Studio,是Microsoft SQL Server 2005中的新组件,这是一个用于访问、配置、管理和开发SQL Server的所有组件的集成环境,是SQL Server 2005中最重要的管理工具。SQL Server Configuration Manager,用来管理SQL Server 2005所提供的服务、服务器与客户端通信协议以及客户端的基本配置管理。SQL Server外围应

相关文档