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

     
     
     
     
  • 相关阅读:
    迭代器与生成器
    11.30
    函数及装饰器
    C#For循环
    C#变量与数据类型
    C#输入输出
    JDK10新特性--var
    idea插件Lombok使用
    NodeJs操作文件-写入、修改、删除、追加、读取文件内容、判断文件是否存在
    mongodb多条件分页查询(mongoTemplate分页查询)
  • 原文地址:https://www.cnblogs.com/abc8023/p/3888919.html
Copyright © 2011-2022 走看看