zoukankan      html  css  js  c++  java
  • 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
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    初始化Winsock库
    memset与初始化
    老板不在,嚣张的正则
    教研室的下午,取快递的一天
    教研室的夜晚
    真不知道起什么名字了
    任性就是没长大咯
    难得起得早,难得周六上班
    工欲学其语,必先装软件
    151008-JS初级完成,PHP入门(变量常量等)-没假放了
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1556130.html
Copyright © 2011-2022 走看看