检测数据库是否存在
use master
go
if not exists
(select * from sysdatabases where name = 'test_db')
begin
create database test_db
select * from sysdatabases where name = 'test_db'
end
else
begin
drop database test_db
end
go
说明:
在master.sysdatabases表中,存放了当前SQL系统的数据库信息。我们可以使用select进行查询
某个表是否存在。SQL自动建表时会使用这样的安全机制。
创建数据库
CREATE DATABASE [test_db] ON
(
NAME = N'test_db',
FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL/data/test_db.mdf' ,
SIZE = 1,
FILEGROWTH = 10%
)
LOG ON
(
NAME = N'test_db_log',
FILENAME = N'C:/Program Files/Microsoft SQL
Server/MSSQL/data/test_db_log.LDF' ,
FILEGROWTH = 10%
)
分离和附加数据库(企业管理器提供界面操作)
如果需要提取数据库文件,而不是删除,使用sp_detach_db将指定数据库从master.sysdatabases
系统表格中删除。这样,我们可以从MSSQL/Data/xx.mdf xx.ldf拷贝文件。
如果重装了SQLServer,或者重装系统了,但是数据库文件仍然存在,这时我们可以使用系统存储
过程sp_attach_db进行恢复:
exec sp_attach_db
@dbname = '库名',
@filename1 = 'C:/MSSQL/Data/库名_Data.MDF',
@filename2 = 'C:/MSSQL/Data/库名_Log.lDF'
阅读 sp_attach_db代码,实现如下:
create database @dbname on
(
filename = @filename1,
filename = @filename2
for attach
)
备份数据库
BACKUP DATABASE 数据库 TO 备份设备
例如:
backup database wdx_1 to disk='d:/bak/wdx_1_bak.bak'
还原数据库
RESTORE DATABASE 数据库 FROM 备份设备
例如:
restore database wdx disk='d:/bak/wdx_1_bak.bak'
枚举数据库
use master
go
select * from sysdatabases
go
枚举库内的系统对象
use testdb
go
select * from sysobjects where xtype='U' //枚举用户自定义对象
selct * from sysobjects where name='wdx_1' //查询某个表是否存在
go
Select * from syscolumns where id = object_id('wdx_1') //枚举字段
也可以参考下面的代码
declare @id int
select @id = id from sysobjects where name = 'wdx_1'
select a.* from syscolumns a inner join sysobjects b on a.id = b.id and a.id = @id
或 select a.* from syscolumns a inner join sysobjects b on a.id = b.id and
b.name='wdx_1'
下面是一个触发器代码
CREATE TRIGGER trig_wdx_3 ON [dbo].[wdx_3]
FOR INSERT, UPDATE, DELETE
AS
declare @id char(20)
select @id = id from inserted
declare @count int
select @count = count(id) from wdx_3 where id = @id
if @count > 1
begin
rollback transaction
print '存有的ID号,插入失败'
end
else
print '插入成功'