zoukankan      html  css  js  c++  java
  • SQL创建表脚本

    《1》SQL Server设置主键自增长列

    SQL Server设置主键自增长列
     
    1.新建一数据表,里面有字段id,将id设为为主键
      www.2cto.com  
    create table tb(id int,constraint pkid primary key (id))
    create table tb(id int primary key )
    2.新建一数据表,里面有字段id,将id设为主键且自动编号
     
    create table tb(id int identity(1,1),constraint pkid primary key (id))
    create table tb(id int identity(1,1) primary key )
    3.已经建好一数据表,里面有字段id,将id设为主键
     
    alter table tb alter column id int not null 
    alter table tb add constraint pkid primary key (id)
    4.删除主键  www.2cto.com  
     
    Declare @Pk varChar(100);
    Select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('tb') and xtype='PK';
    if @Pk is not null
    exec('Alter table tb Drop '+ @Pk)
     

    《2》在新表中创建外键

    1. “对象资源管理器”中,连接到 数据库引擎的实例。

    2. 在标准菜单栏上,单击“新建查询”。

    3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行”。 此实例创建一个表并定义针对列 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》建表之前进行必要的批处理

    CREATE TABLE UserContactPerson
    (
       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

     
     
     
     
  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/abc8023/p/3888919.html
Copyright © 2011-2022 走看看