当前位置: 首页 > news >正文

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

相关文章:

  • Java程序员的经历——手把手带你从0基础小白走向Java程序员大神!(第一章)...
  • Silverlight-CaseStudy(showcase)
  • GDB远程调试的实现
  • 缘何中国光大银行选择华为FusionCube构建融合架构资源池?
  • CCNA系列路由之   动态路由RIP
  • Android 通过触摸动态地在屏幕上画矩形
  • 逻辑学概论笔记
  • 强烈推荐:240多个jQuery插件
  • Linux命令 -- source(点命令)
  • 关于数据库导入出错的问题
  • 一次C语言实现字符排序出现的问题
  • maven多模块搭建
  • vs2005 调试时出现“无法附加。绑定句柄无效”的解决办法
  • 正在考虑用Scala语言来实现TTCN-3的功能
  • ICMP协议
  • 【comparator, comparable】小总结
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Just for fun——迅速写完快速排序
  • LeetCode算法系列_0891_子序列宽度之和
  • SAP云平台里Global Account和Sub Account的关系
  • select2 取值 遍历 设置默认值
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 好的网址,关于.net 4.0 ,vs 2010
  • 悄悄地说一个bug
  • 如何胜任知名企业的商业数据分析师?
  • 详解NodeJs流之一
  • 小程序01:wepy框架整合iview webapp UI
  • 智能合约开发环境搭建及Hello World合约
  • zabbix3.2监控linux磁盘IO
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​2021半年盘点,不想你错过的重磅新书
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #在 README.md 中生成项目目录结构
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)logging(日志模块)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (黑马C++)L06 重载与继承
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)编辑寄语:因为爱心,所以美丽
  • (轉貼) UML中文FAQ (OO) (UML)
  • ***通过什么方式***网吧
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net FrameWork简介,数组,枚举
  • .net Stream篇(六)
  • .NET企业级应用架构设计系列之结尾篇
  • .net中应用SQL缓存(实例使用)