MS 建库、建表、建约束

use master
go

IF EXISTS (SELECT * FROM sys.databases WHERE name = 'StudyDB')
 DROP DATABASE StudyDB  --如果存在则删除
GO
EXEC xp_cmdshell 'mkdir D:\SQL' --调用DOS命令创建文件夹
--建库
CREATE DATABASE StudyDB
ON PRIMARY( --PRIMARY 可选指定主文件组中的文件
 
 NAME = 'StudyDB1_data', --主数据文件的逻辑名
 FILENAME = 'D:\SQL\StudyDB1_data.mdf' , --主数据文件的物理名
 SIZE = 3MB,      --主数据文件初始大小
 MAXSIZE = 5MB,    --主数据文件最大大小
 FILEGROWTH = 20%   --主数据文件的增长率
), --注意","号分隔
(
 
 NAME = 'StudyDB2_data', --主数据文件的逻辑名
 FILENAME = 'D:\SQL\StudyDB2_data.ndf' , --主数据文件的物理名
 SIZE = 512 KB,      --主数据文件初始大小
 MAXSIZE = 5MB,    --主数据文件最大大小
 FILEGROWTH = 20% 
)
LOG ON
(
 
 NAME = 'StudyDB1_log',
 FILENAME = 'D:\SQL\StudyDB_log1.ldf' ,
 SIZE = 512KB,
 MAXSIZE = 3MB,
 FILEGROWTH = 20%
),  --注意","号分隔
(

 NAME = 'StudyDB2_log',
 FILENAME = 'D:\SQL\StudyDB_log2.ldf' ,
 SIZE = 512KB,
 MAXSIZE = 3MB,
 FILEGROWTH = 20%
)
go
--建表
use StudyDB  --必须使用StudyDB这个数据库,不然你建立的表在master数据库里面
go
IF EXISTS(SELECT * FROM sys.objects WHERE name='stuInfo')
  DROP TABLE stuInfo
--创建主表stuInfo--
CREATE TABLE stuInfo
(
 stuName    NVARCHAR(20)    NOT NULL,
 stuNo      NCHAR(6)        NOT NULL,
 stuSex     NCHAR(4)        NOT NULL,
 stuAge     SMALLINT        NOT NULL,
 stuSeat    SMALLINT        IDENTITY(1,1),
 stuAddress NTEXT
) 
GO
--为主表stuInfo创建约束[在外添加约束]--
ALTER TABLE stuInfo
  ADD CONSTRAINT PK_stuNo      PRIMARY KEY(stuNo),--主键约束
   CONSTRAINT UQ_stuNo      UNIQUE (stuNo),--唯一约束
      CONSTRAINT CK_stuNo      CHECK(stuNo LIKE 'S253[0-9][0-9]'),--检查约束
      CONSTRAINT CK_stuSex     CHECK(stuSex='' OR stuSex=''),
      CONSTRAINT CK_stuAge     CHECK(stuAge BETWEEN 15 AND 40),
      CONSTRAINT CK_stuSeat    CHECK(stuSeat<=30),
      CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress --默认值设置
 
GO
--如果在已有的数据中添加约束
ALTER TABLE stuInfo 
	WITH NOCHECK --不检查已有数据
	ADD CONSTRAINT my_cus 
	CHECK(stuSex IN (1,2))
	
ALTER TABLE stuInfo
	NOCHECK  | CHECK 
	CONSTRAINT my_cus --使用定义的my_cus约束失效,生效


--创建从表stuMarks--
CREATE TABLE stuMarks
(
 ExamNo CHAR(7) NOT NULL,
 stuNo NCHAR(6) NOT NULL,
 writtenExam SMALLINT NOT NULL,
 LabExam SMALLINT NOT NULL
)
GO
--为从表stuMarks创建约束--
ALTER TABLE stuMarks
   ADD CONSTRAINT PK_ExamNo         PRIMARY KEY(ExamNo),
       CONSTRAINT CK_ExamNo         CHECK(ExamNo LIKE 'S2718[0-9][0-9]'),
       CONSTRAINT FK_stuNo          FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo),--外键约束
       CONSTRAINT CK_writtenExam    CHECK(writtenExam BETWEEN 0 AND 100),
       CONSTRAINT DF_writtenExam    DEFAULT 0 FOR writtenExam,
       CONSTRAINT CK_LabExam        CHECK(LabExam BETWEEN 0 AND 100),
       CONSTRAINT DF_LabExam        DEFAULT 0 FOR LabExam
GO

 

CREATE TABLE TBL_TEST1(
 TEST1_ID INT PRIMARY KEY IDENTITY(1,1) --主键,自增
 , TEST_NAME VARCHAR(20) NOT NULL
)
CREATE TABLE TBL_TEST2(
 TEST2_ID INT PRIMARY KEY IDENTITY(1,1) 
 , TEST1_ID INT REFERENCES TBL_TEST1(TEST1_ID)--外键约束
 , TEST2_NAME VARCHAR(20) UNIQUE
 , TEST2_SEX CHAR(2) CHECK(TEST2_SEX='' OR TEST2_SEX='') --或者:CHECK TEST2_SEX IN('男','女')
 , TEST2_ADDRESS TEXT DEFAULT('地址不详')
)

insert into TBL_TEST1 values('1')
select * from TBL_TEST1
delete TBL_TEST1
insert TBL_TEST2 values(1,'1','','')
select * from TBL_TEST2
delete TBL_TEST2

 

Technorati 标签: T-Sql

转载于:https://www.cnblogs.com/jinho/archive/2010/07/31/1789320.html

<think>好的,我现在要回答用户的问题:如何在SQL Server中创、定义字段以及添加注释。首先,我需要回忆一下SQL Server的基本语法。创应该使用CREATE TABLE语句,后面跟上名和字段定义。每个字段需要指定名称、数据类型以及可能的约束,比如主键或是否允许NULL值。 接下来是添加注释的部分。根据用户提供的引用,我记得在SQL Server中,注释是通过扩展属性存储的,使用系统存储过程sp_addextendedproperty来添加。这需要指定注释的名称(比如MS_Description)、注释内容、以及对象的层次结构,比如模式、名、字段名等。 用户提供的引用中有几个例子,比如引用[2]和引用[3]展示了如何为字段添加注释,使用EXECUTE sp_addextendedproperty命令。同时,引用[1]中的例子涉及到生成注释语句的查询,这可能是在迁移数据时批量处理注释的情况,但用户现在的问题是关于创和添加注释,所以可能需要更基础的步骤。 我需要确保步骤清晰,首先创,然后逐个字段添加注释。另外,用户可能需要知道如何为整个添加注释,而不仅仅是字段。所以,我应该分别说明和字段的注释添加方法。 还需要检查语法是否正确,比如在sp_addextendedproperty中的各个参数是否正确,比如level0type通常是SCHEMA,level0name是dbo,level1type是TABLE,依此类推。同时,参数的位置和命名是否正确,比如@value是注释内容,@name是MS_Description。 可能的疑问是,用户是否需要在创的同时添加注释,还是之后。根据引用中的例子,注释是之后添加的,所以步骤应该是先创,再使用存储过程添加注释。需要明确说明这一点。 另外,是否需要考虑不同版本的SQL Server之间的差异?比如某些语法是否在旧版本中不可用。但用户没有提到版本,所以假设使用较新的版本,这些存储过程应该都适用。 最后,示例代码需要正确,包括正确的语法和注释的位置。可能需要提供一个完整的例子,从创到添加和字段的注释,这样用户能有一个完整的参考。 总结步骤应该是: 1. 使用CREATE TABLE,定义字段和约束。 2. 使用sp_addextendedproperty为添加注释。 3. 使用同样的存储过程为每个字段添加注释。 需要确保每个步骤的代码示例正确无误,并且参数正确传递。比如,添加注释时,level1type是TABLE,而添加字段注释时,level2type是COLUMN,并指定字段名。 现在,把这些整理成一个结构化的回答,分步骤说明,并给出示例代码。同时,根据用户要求生成相关问题,可能涉及注释的查询、批量添加注释的方法,或者修改已有注释的方法。</think>在 SQL Server 中创、定义字段并添加注释的步骤如下: --- ### 一、创并定义字段 使用 `CREATE TABLE` 语句创,语法如下: ```sql CREATE TABLE 名 ( 字段1 数据类型 [约束], 字段2 数据类型 [约束], ... ) ``` **示例**: ```sql CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, HireDate DATE ); ``` --- ### 二、添加注释 通过系统存储过程 `sp_addextendedproperty` 添加注释,语法如下: ```sql EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'注释内容', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'名'; ``` **示例**: ```sql EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'员工信息', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Employees'; ``` --- ### 三、添加字段注释 同样使用 `sp_addextendedproperty`,但需指定字段层级(`@level2type = N'COLUMN'`): ```sql EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'字段注释内容', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'名', @level2type = N'COLUMN', @level2name = N'字段名'; ``` **示例**(为 `EmployeeID` 添加注释): ```sql EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'员工唯一标识', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Employees', @level2type = N'COLUMN', @level2name = N'EmployeeID'; ``` --- ### 四、验证注释 可通过以下查询查看和字段的注释: ```sql SELECT objname, name, value FROM fn_listextendedproperty( N'MS_Description', N'SCHEMA', N'dbo', N'TABLE', N'名', N'COLUMN', NULL ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值