
正文
sqlserver表状态,sql server数据库状态
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
关于sqlserver数据库的若干问题
呵呵,很期待楼主的奖励分啊~~~,那么我们开始~~~~~~~力求讲得明白,生动~~~啊,啊,哈~~~
1】可以使用分离数据库,操作:对数据库点击右键--属性--任务--分离。
提示:在分离之前要先设置数据库为单用户,不设置这个,你无法成功分离。具体操作也很简单,也是对数据库右键--属性--选项--看右边的--》状态下--限制访问--改为single,确定退出,在执行分离。
如果还不明白,就访问微软的地址看步骤:
2】说触发器这东西。概念性东西太多了,紧简要的说
触发器是建立在一张数据表上的,对表的操作有3个动作,插入数据,删除数据,更新数据。我们现在假定有两个表:A和B,现在要实现一个功能,在往A表中插入一条数据的同时,也希望插入到B中,那么怎么实现呢?最好的办法就是在A表上建立一个insert触发器。请看这个例子,你自己动手逐步执行。体会一哈:
--创建测试表,插入测试数据
create table a(a1 varchar(10),a2 varchar(10),a3 varchar(10),a4 varchar(10))
create table b(b1 varchar(10),b2 varchar(10))
--创建插入数据的触发器,在a表上
go
create trigger insert_data
on a
for insert
as
declare @a varchar(20),@b varchar(20)
select @a=a1,@b=a4 from inserted
insert into b(b1,b2)
select @a,@b
GO
--插入数据测试
insert a(a1,a2,a3,a4)
select '新华书店','二零零四年','三月','九百元'
--查看结果,发现b表也有数据了耶~~~~
select * from a
select * from b
3】函数啊,它的功能跟系统函数min(),count(),sum()是一样的,唯一的区别,就是是你写的,,哈哈~~~
这里要实现这样的功能,比如一个表AA中有2条记录
1,'a'
1,'b'
我们希望得到这样的格式,就变成了1条记录(也就是合并字符串的意思)
1,'a,b'
这个时候,我们自定义的函数就发挥功效,注意一点在引用函数的时候要指明所有者,就如例子中写的dbo.my_str()一定要函数前加这个dbo否则报错。
请看我的示范:
--自定义函数,表AA(a,b):
--建立测试表,插入测试数据
create table aa (a int,b varchar(20))
insert aa
select 1,'see' union all select 2,'look' union all select 1,'smell'
union all select 1,'point' union all select 2,'touch'
GO
create function my_str(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(b as varchar) from AA where a=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
--查看结果
select distinct a,dbo.my_str(a) b from aa
--删除测试
drop table a,b,aa
drop function my_str
drop trigger insert_data
--最后的一张图~~~~,如果楼主有点收获,那么寡人就没白写这些~~:-)哈~
相关问答
Q1: sqlserver查询出来列表数据,其中有个状态字段是bit类型的,在数据库中执行脚本查询出来的数
sqlserver查询出来列表数据,其中有个状态字段是bit类型的,在数据库中执行脚本查询出来的数 一、在编程的领域,true 跟 1 或「真」同义;false 跟 0 或「假」同义。数据库查出结果为 0 或 1,是数据库本身的效果。
二、数据库的 bit 资料型别本身就是存放布林值,不是「真」就是「假」,在编程语言里的相应型别通常也会是 true 或 false。不过有些比较不严谨的编程语言, true 或 false 一般会用 1 或 0 来代表。
三、改进的方式,就是瞭解上述观念之後,找出你编程语言中等效的比较方式即可。也就是你要知道数据库的 true 或 false,跟你所用编程语言的哪种资料型别等效。
Q2: 紧急求助,SQL2000数据库处于质疑状态
在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",原因约有以下几条:
1.错误的删除日志;
2.硬件(HD)损坏,造成日志和数据文件写错误;
3.硬盘的空间不够,比如日志文件过大;
解决办法:
最简单的办法是有数据库的全备份,然后恢复即可.
步骤:
1. 删除原始的数据库:
USE MASTER
GO
DROP DATABASE DB_SUEPECT
2.建立同名的数据库:
USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
3.恢复数据库:
RESTORE DATABASE DB_SUSPECT
FROM DBNAME_BACKUP.DAT
4.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')
5.重新启动MSSQLSERVER服务.
如果没有全备份,那就要用一些特殊的方法:
1.设置数据库为紧急模式
Use Master
GO
sp_configure 'allow updates', 1
reconfigure with override
GO
UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'
GO
2.停掉SQL Server服务:
.Net STOP MSSQLSERVER
3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:
4.启动SQL Server服务:
.Net START MSSQLSERVER
5.重新建立一个同名的数据库DB_SUSPECT;
USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
6.设置数据库运行在单用户的模式:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET SINGLE_USER
GO
7.停掉SQL服务:
.Net STOP MSSQLSERVER
8.把原来的数据文件再覆盖回来:
9.启动SQL Server服务:
.Net START MSSQLSERVER
10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "DB_SUSPECT"
11.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')
12.恢复数据库为多用户模式:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET MULTI_USER
GO
13.恢复SQLSERVER原始的配置:
USE MATER
GO
UPDATE sysdatabases SET status = 4194320 where name = 'DB_SUSPECT'
GO
14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with override
GO
15.重新启动MSSQLSERVER服务:
最好重新启动操作系统
16.备份数据库:
可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF的所在目录的权限.
灵验脚本
遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
======================================================
--before running any script, run the following to set the
master database to allow updates
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--Run the following script
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = 'Database_Name'
--Run the following script
exec SP_resetstatus Database_Name
--stop and start the MSDTC at this stage
--After the procedure is created, immediately disable
updates to the system tables:
exec sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
Q3: sqlserver查看表是否被锁
-- 找到临时表的记录数select@intCountProperties =
Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR0
RETURN @@ERROR
if @intCountProperties=0
select '现在没有阻塞和死锁信息' as message
-- 循环开始
while @intCounter = @intCountPropertiesbegin
-- 取第一条记录select@spid = spid,@bl =bl
from #tmp_lock_who where id = @intCounterbegin
if @spid =0select'引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'elseselect'进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl
AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )end-- 循环指针下移
Q4: sqlserver怎么用sql查看具体那个表被锁住了
详细步骤如下:
1、点击【新建查询】按钮,打开SQL命令编辑框,对数据库表的操作以及维护都可以通过编辑SQL命令实现。
2、在编辑框内编辑创建数据库表的代码,确认代码无误后,单击【执行】按钮,创建数据表。
3、创建数据表的源代码如下:
use test go
if exists(select name from sys.tables where name='Student')
drop table Student go
create table Student
(sname nchar(10) primary key,
sex nchar(2) not null,
bir datetime)
数据库管理系统,database management system,简称dbms,是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。
提供数据定义语言(ddl)。用它书写的数据库模式被翻译为内部表示。数据库的逻辑结构、完整性约束和物理储,存结构保存在内部的数据字典中。数据库的各种数据操作(如查找、修改、插入和删除等)和数据库的维护管理都是以数据库模式为依据的。





