《1》SQL Server设置主键自增长列
《2》在新表中创建外键
-
在“对象资源管理器”中,连接到 数据库引擎的实例。
-
在标准菜单栏上,单击“新建查询”。
-
将以下示例复制并粘贴到查询窗口中,然后单击“执行”。 此实例创建一个表并定义针对列 TempID 的外键约束,该列引用 Sales.SalesReason 表中的列 SalesReasonID。 ON DELETE CASCADE 和 ON UPDATE CASCADE 子句用于确保对 Sales.SalesReason 表的更改自动传播到 Sales.TempSalesReason 表
USE AdventureWorks2012; GO CREATE TABLE Sales.TempSalesReason (TempID int NOT NULL, Name nvarchar(50), CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID), CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE );GO
《3》建表之前进行必要的批处理
(
ID INT PRIMARY KEY,
UserID INT,
ContactPersonID INT
)
(贴代码是格式错位了)这种写法是最原始、落后的。也是最容易产生错误的写法:首先它没有在代码里指定在那个数据库执行,有时候人很粗心,打开文件就执行了,有可能把表就建到master或其他数据库去了。其次在批处理建表的时候,如果这个表在该数据库已经存在了。则会影响执行。所以我们可以改善一下它的写法。
USE MyAssistant
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE NAME = ‘UserContactPerson‘ AND XTYPE = ‘U‘)
DROP TABLE UserContactPerson;
CREATE TABLE UserContactPerson
(
ID INT PRIMARY KEY,
UserID INT,
ContactPersonID INT
)
GO
这种写法也有个问题,就是DROP TABLE UserContactPerson; 这个地方,一般来说不建议删除表后,然后新建,除非是数据库创建时,新建表。原因不用多说,想必大家都很明白。一般应该给予提示,让执行这段脚本的人去选择处理,类似于下面的写法
IF NOT EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = ‘Users‘ AND XTYPE =‘U‘)
CREATE TABLE [Users]
(
[UserID] INT IDENTITY(1,1), --ID主键
[UserName] NCHAR(15), --用户名
[Password] CHAR(15), --密码
[NickName] NCHAR(15), --别名、网名
[Name] NCHAR(8), --真实姓名
[SEX] BIT, --性别
[Age] SMALLINT, --年龄
[Birthday] SMALLDATETIME, --生日
[Moblie] CHAR(11), --手机
[OfficePhone] CHAR(12), --办公室座机
[HomePhone] CHAR(12), --家里座机
[Email] NCHAR(30), --电子邮件
[QQ] CHAR(10), --QQ
[MSN] CHAR(20), --MSN
[Skype] CHAR(25), --Skype
[PersonWebsit] CHAR(20), --个人主页
[Schoole] NCHAR(20), --毕业学校
[Place] NCHAR(15), --籍贯
[Hometown] NCHAR(25), --家乡
[CreateDate] SMALLDATETIME, --用户创建时间
[UpdateDate] SMALLDATETIME, --用户资料更新时间
[LastLogin] SMALLDATETIME, --用户最后登录时间
[IP] CHAR(15), --用户登录IP
[Lock] BIT, --用户是否被锁定
[IsAdmin] BIT, --是否是管理员
[Session] CHAR(20), --保存登录Seesion
CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID)
)
ELSE
--DROP TABLE Users
PRINT ‘this table have been existed! you should check and take action‘
GO
下面看看来判断该表是否存在的几种方法
1: IF NOT EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = ‘Users‘ AND XTYPE =‘U‘)
2:IF EXISTS ( SELECT 1 FROM dbo.sysobjects WHERE id = object_id(N‘[dbo].[UserGroup]‘) and OBJECTPROPERTY(id, N‘IsTable‘) = 1)
3:IF OBJECT_ID(N‘ContactPerson‘) IS NOT NULL