MS SQL 建表SQL的脚本

简介:
     数据库里新建一个表的方式比较多,可以在对象资源管理器手动新建一个表,这样的建表方式比较方便、直观。但是如果该表要在几个数据库(开发环境数据库,测 试环境数据库、正式系统数据库等)里新建的话,这时反而不如用脚本处理,这样会方便得多。尤其是在创建数据库时要新建上百个表时,那种手工建表方式想都不 敢想。这里主要讨论、收集使用脚本来新建表的写法。如有不妥或不对的地方,希望大家多多指教,更正我的错误。下面来看看第一种SQL写法
Code Snippet
  1. CREATE TABLE UserContactPerson
  2. (
  3.    ID                    INT PRIMARY KEY,
  4.    UserID                INT               ,
  5.    ContactPersonID        INT
  6.     
  7. )

这种写法是最原始、落后的。也是最容易产生错误的写法:

      首先有在代码里,它没有指定在那个数据库执行,有时候人很粗心,打开文件就执行了,有可能把表就建到master或其他数据库去了。

      其次在批处理建表的时候,如果这个表在该数据库已经存在了。则会影响执行。所以我们可以改善一下它的写法。

 

Code Snippet
  1. USE MyAssistant
  2. GO
  3.  
  4.   IFEXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = 'UserContactPerson' AND XTYPE = 'U')
  5.  
  6. DROP TABLE UserContactPerson;
  7. CREATE TABLE UserContactPerson
  8. (
  9.    ID                    INT PRIMARY KEY,
  10.    UserID                INT,
  11.    ContactPersonID        INT
  12.     
  13. )
  14. GO

这这种写法也有个问题,就是DROP TABLE UserContactPerson; 这个地方,一般来说不建议删除表后,然后新建,除非是数据库创建时,新建表。原因不用多说,想必大家都很明白。一般应该给予提示,让执行这段脚本的人去选择处理,类似于下面的写法

   1: IF NOT EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = 'Users' AND XTYPE ='U') 

   2:  

   3: CREATE TABLE [Users]

   4: (

   5:     [UserID]                  INT IDENTITY(1,1)    ,--ID主键

   6:     [UserName]                NCHAR(15)            ,--用户名

   7:     [Password]                CHAR(15)             ,--密码

   8:     [NickName]                NCHAR(15)            ,--别名、网名    

   9:     [Name]                    NCHAR(8)             ,--真实姓名

  10:     [SEX]                     BIT                  ,--性别

  11:     [Age]                     SMALLINT             ,--年龄

  12:     [Birthday]                SMALLDATETIME        ,--生日

  13:     [Moblie]                  CHAR(11)             ,--手机

  14:     [OfficePhone]             CHAR(12)             ,--办公室座机

  15:     [HomePhone]               CHAR(12)             ,--家里座机

  16:     [Email]                   NCHAR(30)            ,--电子邮件

  17:     [QQ]                      CHAR(10)             ,--QQ

  18:     [MSN]                     CHAR(20)             ,--MSN

  19:     [Skype]                   CHAR(25)             ,--Skype

  20:     [PersonWebsit]            CHAR(20)             ,--个人主页

  21:     [Schoole]                 NCHAR(20)            ,--毕业学校

  22:     [Place]                   NCHAR(15)            ,--籍贯

  23:     [Hometown]                NCHAR(25)            ,--家乡

  24:     [CreateDate]              SMALLDATETIME        ,--用户创建时间

  25:     [UpdateDate]              SMALLDATETIME        ,--用户资料更新时间

  26:     [LastLogin]               SMALLDATETIME        ,--用户最后登录时间

  27:     [IP]                      CHAR(15)             ,--用户登录IP

  28:     [Lock]                    BIT                  ,--用户是否被锁定

  29:     [IsAdmin]                 BIT                  ,--是否是管理员

  30:     [Session]                 CHAR(20)             ,--保存登录Seesion

  31:     CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID)    

  32: )

  33: ELSE

  34:   --DROP TABLE Users

  35:   PRINT 'this table have been existed! you should check and take action'

  36: GO

下面看看来判断该表是否存在的几种方法

 

   

Code Snippet
  1. 1    IF NOT EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = 'Users' AND XTYPE ='U')  
  2. 2   IF EXISTS( SELECT 1 FROM dbo.sysobjects  WHERE id = object_id(N'[dbo].[UserGroup]') and OBJECTPROPERTY(id, N'IsTable') = 1)
  3. 3   IF OBJECT_ID(N'ContactPerson') IS NOT NULL
相关文章
|
2月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
74 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
3月前
|
SQL 测试技术 数据库
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
|
6月前
|
SQL 数据库
PowerDesigner导出SQL脚本运行注释出现乱码问题
PowerDesigner导出SQL脚本运行注释出现乱码问题
142 0
|
6月前
|
SQL 关系型数据库 MySQL
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
249 0
|
23小时前
|
SQL 关系型数据库 MySQL
|
1天前
|
SQL 关系型数据库 MySQL
|
2天前
|
SQL 关系型数据库 MySQL
SQL脚本字符串替换
【5月更文挑战第3天】
14 4
|
4天前
|
SQL 关系型数据库 MySQL
SQL脚本列转行
【5月更文挑战第2天】
6 0
|
5天前
|
SQL 关系型数据库 MySQL
SQL脚本行转列
【5月更文挑战第1天】
10 0
|
19天前
|
SQL Java 关系型数据库
mybatis-plus启动时自动执行sql脚本
mybatis-plus启动时自动执行sql脚本
20 1