方法一:
其实根本不用判断文件夹是否存在,直接调用创建:
exec master.dbo.xp_cmdshell 'md C:\ABC '
如果文件夹 C:\ABC 存在,执行结果是:
/*
output
子目录或文件 C:\ABC 已经存在。
NULL
*/
如果文件夹 C:\ABC 存在,执行结果是:
/*
output
NULL
*/
至于 DOS 命令 MD 成功与否,都不会在 SQL中 raiserror。
可以用 no_output 参数把执行结果屏蔽起来:
exec master.dbo.xp_cmdshell 'md C:\ABC ',no_output
重复执行 N 次,都是:命令已成功完成。
方法二:
最简单的方法
declare @n int;
exec @n=xp_cmdshell 'dir d:\ASD ',NO_OUTPUT
IF (@n=0)
PRINT '存在 '
else
print '目录不存在 '
注意:要使用xp_cmdshell存储过程,必须先启用xp_cmdshell,可以使用外围应用配置器工具以及通过执行 sp_configure 来启用和禁用 xp_cmdshell。
下面是T-SQL控制xp_cmdshell的启用或禁用:
EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE
Go
EXEC sys.sp_configure N'xp_cmdshell', N'1' -- 为1则启用xp_cmdshell,为0则禁用xp_cmdshell
Go
RECONFIGURE WITH OVERRIDE
Go
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
Go
/*********************************************************************************************************/
在sql2000查询分析器创建数据库
使用SQLServer查询分析器以语句方式创建数据库的方法可以按照指定的逻辑数据库名称和逻辑日志名称,在指定存储设备的指定路径上创建数据库;第二种格式,可以按照指定的逻辑数据库名称和默认的逻辑日志名称(数据库名称_LOG.LDF),在指定存储设备的指定路径上创建数据库;第三种格式,可以按照默认的逻辑数据库名称(数据库名称.MDF)和逻辑日志名称(数据库名称_LOG.LDF),在默认存储设备的默认路径
如下:
单击工具栏的“新建查询(N)”,启动查询分析器。
管理工作室的新建数据库GUI
(2)利用查询分析器,可以直接使用语句创建数据库、数据表和视图等。其具体方法如下:
◆在查询分析器中,直接输入SQL语句;
◆单击语句语法分析按钮“√”,检查分析SQL语句是否正确;
◆单击执行按钮“!执行(X)”,运行查询分析器中的语句序列。
创建数据库的语句格式:
CREATE DATABASE <数据库名>
[ON
( NAME = <数据表名>,
FILENAME = <盘符\路径\数据库存储名称>)
[LOG ON
( NAME = <日志文件名>,
FILENAME = <盘符\路径\日志文件存储名称>)]]
创建数据库Student的语句:
CREATE DATABASE Student
ON
( NAME = 'Student_dat',
FILENAME = 'D:\data\Student_dat.mdf')
LOG ON
( NAME = 'Student_Log',
FILENAME = 'D:\data\Student_Log.ldf ') 或者
CREATE DATABASE Student
ON
( NAME = 'Student_dat',
FILENAME = 'D:\data\Student_dat.mdf') 或者
CREATE DATABASE Student
在默认存储设备的默认路径上,创建默认的逻辑数据库名称(Student.MDF)和逻辑日志名称(Student_LOG.LDF)的数据库Student。其默认路径如下:
C:\Program Files\Microsoft SQL Server\MSSQL\Data\Student.mdf
C:\Program Files\Microsoft SQL Server\MSSQL\Data\Student_log.ldf
注意:上述三个格式中,第一种格式,(C:\Program Files\Microsoft SQL Server\MSSQL\Data\)上创建数据库。
删除数据库的语句格式:
DROP DATABASE <数据库名>[,<数据库名>,…]
例如:建立数据库MyTestStudent,如果该数据库存在,则先删除,然后建立。
IF OBJECT_ID ('MyTestStudent') IS NOT NULL
SELECT OBJECT_NAME(OBJECT_ID('MyTestStudent')) '对象名称',
OBJECT_ID('MyTestStudent') '对象ID'
DROP DATABASE MyTestStudent
GO
CREATE DATABASE MyTestStudent
说明:OBJECT_ID()函数用于返回对象的ID,若存在,则返回值为一个整数,否则为空值(NULL)。OBJECT_NAME()函数用于返回对象的名称,若存在,则返回值为一个名称字符串,否则为空串(“”)。输出对象的Id和名称可以使用如下SELECT语句:
SELECT <表达式>[,…,<表达式>]
创建数据表的语句格式:
CREATE TABLE <数据表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ])
说明:
<数据表名>:所要定义的数据表的名称;
<列名>:组成数据表的各个数据项的名称;
<列级完整性约束条件>:数据项的完整性约束条件;
<表级完整性约束条件>:数据表的完整性约束条件;
<数据类型>:数据项的数据类型。常用的数据类型如表8.1所示。
表8.1 SQL Server 2008常用数据类型
BIT, SMALLINT, INT, BIGINT | 整型 |
MONEY, SMALLMONEY | 货币型 |
FLOAT,REAL | 浮点型 |
DATETIME, SMALLDATETIME | 日期时间型 |
IMAGE | 二进制图像型 |
CHAR(n) | 长度为n的字符型 |
CREATE TABLE Student(
SNo CHAR(10) PRIMARY KEY NOT NULL,
SName CHAR(20) NOT NULL,
SSex CHAR(2),
SAge INT) 或者
CREATE TABLE Student(
SNo CHAR(10) PRIMARY KEY NOT NULL,
SName CHAR(20) NOT NULL,
SSex CHAR(2),
SAge INT CHECK (SAge>1 and SAge<100)) 或者
CREATE TABLE Student(
SNo CHAR(10) PRIMARY KEY NOT NULL,
SName CHAR(20) NOT NULL,
SSex CHAR(2),
SAge INT,
CONSTRAINT SAge1_100 CHECK (SAge>1 and SAge<100)) 或者
CREATE TABLE Student(
SNo CHAR(10) NOT NULL,
SName CHAR(20) CONSTRAINT SName_NotNull NOT NULL,
SSex CHAR(2),
SAge INT,
CONSTRAINT SNo_PK PRIMARY KEY(SNo),
CONSTRAINT SName_Unique UNIQUE(sname),
CONSTRAINT SAge1_100 CHECK (sage>1 and sage<100)) 或者
CREATE TABLE Course(
CNo CHAR(10) PRIMARY KEY NOT NULL,
CName CHAR(20) NOT NULL,
CCredit INT) 或者
CREATE TABLE StudentCourse(
SNo CHAR(10) NOT NULL,
CNo CHAR(10) NOT NULL,
Grade FLOAT,
PRIMARY KEY (SNo, CNo),
FOREIGN KEY (SNo) REFERENCES Student(SNo),
FOREIGN KEY (CNo) REFERENCES Course(CNo))
注意:在创建数据表之前,先使用USE语句打开相应的数据库。或者在SQL Server的管理工作室的工具栏的“可用数据库”下拉列表框中,选择相应的数据库。
例如:打开数据库Student的语句为:USE Student
技巧:在创建数据表之前,如果该数据表已经存在,可以先使用OBJECT_ID检测其存在性,若非空,则可以先删除该数据表,然后再建立。具体实现方法如下:
例如:建立一个数据表MyTestStudent,即使该表存在,也可以建立。
-- 测试数据表是否存在,如果若存在,则删除
IF OBJECT_ID ('MyTestStudent') IS NOT NULL
DROP TABLE MyTestStudent
GO
CREATE TABLE MyTestStudent(
SNo CHAR(10) PRIMARY KEY NOT NULL,
SName CHAR(20) NOT NULL,
SSex CHAR(2),
SAge INT)
向数据表添加新数据项的语句格式:
ALTER TABLE <表名>
ADD <新列名> <数据类型> [ 完整性约束 ]
例如:向Student增加“注册时间”列,其数据类型为日期型。
ALTER TABLE Student ADD SEnrollment DATETIME
例如:向Student的SName增加唯一性约束。
ALTER TABLE Student ADD UNIQUE(SName) 或者
ALTER TABLE Student ADD CONSTRAINT Un_SName UNIQUE(SName)
修改数据表的数据项的语句格式:
ALTER TABLE <表名>
ALTER COLUMN <列名> <数据类型>
例如:修改Student的SAge的类型为SMALLINT。
ALTER TABLE Student ALTER COLUMN Sage SMALLINT
删除数据表的数据项的语句格式:
ALTER TABLE <表名>
DROP COLUMN <列名> | CONSTRAINT <约束名称>
例如:删除Student的数据项Senrollment。
ALTER TABLE Student DROP COLUMN Senrollment
删除数据表的数据项约束的语句格式:
ALTER TABLE <表名>
DROP CONSTRAINT <约束名称>
例如:删除Student的SName的唯一性约束。
ALTER TABLE Student DROP CONSTRAINT Un_SName
删除数据表的语句格式:
DROP TABLE <数据表名称>
例如:删除数据表Student。
DROP TABLE Student
删除数据库的语句格式:
DROP DATABASE <数据库名称>
例如:删除数据库Student。
DROP DATABASE Student
注意:在删除数据库之前,先关闭要删除的数据库。方法是使用USE打开另外一个数据库。