原文:慎用SELECT INTO复制表

很多时候我们习惯于用SELECT INTO复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO 复制表或表结构的时候,只是得到了一个“外壳”,就像克隆人一样,只是得到了一个躯体,个人的意识、回忆都不会克隆的。像原表的主键、外键、约束、触发器、索引都不会被复制过来。这点要注意哦,在某些情况下,没有注意的话,会照成“灾难后果的”,下面给个脚本例子,给大家演示下SELECT INTO复制表或表结构时,没有得到原表的主键、外键、约束....
准备数据
USE [MyAssistant]
GO

SET ANSI_NULLS ON
GO

--创建
IF OBJECT_ID(N'Groups') IS NOT NULL
    BEGIN
        PRINT 'This table have been existed';
        DROP TABLE Groups;
    END 
ELSE
    BEGIN
        CREATE TABLE [dbo].[Groups]
        (
            [GroupID]        SMALLINT    IDENTITY(1, 1),
            [GroupName]      NVARCHAR(50),
            [Description]    NVARCHAR(100),
            CONSTRAINT [PK_Groups_GroupID] PRIMARY KEY(GroupID)
        )
    END
GO

--添加数据
INSERT INTO dbo.Groups
VALUES ('SuperAdmin', '超级管理员');

INSERT INTO  dbo.Groups
VALUES('CusServGroup', '客服部门组');

INSERT INTO  dbo.Groups
VALUES('CommonGroup', '普通部门组');
GO

DROP TABLE dbo.Users
CREATE TABLE [dbo].[Users]
(
  [UserId]        BIGINT IDENTITY(1, 1) NOT NULL ,
  [UserName]      NVARCHAR(25) NULL ,
  [PassWord]      NVARCHAR(50) NULL ,
  [Sex]           BIT NULL ,
  [GroupID]       SMALLINT ,    
  CONSTRAINT [PK_Users_UserId] PRIMARY KEY CLUSTERED ( [UserId] ASC ),
  CONSTRAINT [FK_Users_Groups_GroupID] FOREIGN KEY(GroupID) REFERENCES Groups(GroupID)
)
GO

ALTER TABLE [dbo].[Users] ADD CONSTRAINT [DF_Users_Sex]  DEFAULT ((0)) FOR [Sex]
GO

CREATE TRIGGER TRG_Users ON dbo.Users
AFTER DELETE
AS
SET IDENTITY_INSERT dbo.Users ON;

INSERT INTO UserHistory
(UserId, UserName, PassWord, Sex, GroupID)
SELECT * FROM deleted
GO

INSERT  INTO dbo.Users( UserName, PassWord, Sex, GroupID )
VALUES  ( 'Kerry', '312ddfjdf',  1,    1          )
 
INSERT  INTO dbo.Users( UserName, PassWord, Sex, GroupID )
VALUES  ( 'test',  '312ddfjdf', 0, 3   )

我们用下面的语句复制下表Users,我们具体可以从下图中看到表User与TestUser结构的不同了

SELECT * INTO TestUser FROM  dbo.Users

慎用SELECT INTO复制表的更多相关文章

  1. MSSQLSERVER数据库- 慎用SELECT INTO复制表

    很多时候我们习惯于用SELECT INTO复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些.但是要注意: SELECT INTO 复制表或表结构的时候, ...

  2. 尽量不要用select into 复制表

    select into 复制表会带来灾难后果,因为只是复制了一个外壳,就像克隆人,有躯体没意识,像原表的主键 外键 约束 触发器 索引都不会被复制过来, 创建一个表:CREATE TABLE [dbo ...

  3. MySQL 复制表

    MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 本文将为大家介绍如何完整 ...

  4. Oracle如何复制表的sql语句

    以下的文章主要是介绍Oracle复制表的sql语句,其中包括如何复制表结构的sql.以及如何复制相关表的结构又复制表中的数据sql.以下就是相关内容的具体介绍,望你浏览完以下的内容会有所收获. 如下, ...

  5. 吴裕雄 26-MySQL 复制表

    如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的.本章节将为大家介绍如何完整的复制MySQL数据 ...

  6. mysql-10临时表、复制表

    1.创建临时表 mysql临时表在我们需要保存一些临时数据时非常有用. 临时表只在当前连接可见,当关闭连接时,mysql会自动删除表并释放所有空间. 如果使用客户端创建临时表,只有在管不客户端程序时才 ...

  7. 【MYSQL笔记2】复制表,在已有表的基础上设置主键,insert和replace

    之前我自己建立好了一个数据库xscj:表xs是已经定义好的 具体的定义数据类型如下: 为了复制表xs,我们新建一个表名为xstext,使用下列语句进行复制xs,或者说是备份都可以: create ta ...

  8. 二十七、MySQL 复制表

    MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 本章节将为大家介绍如何完 ...

  9. MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

    摘要: 外键 一对多 外键 多对多 外键 一对一 --------------------------------------------------------------------------- ...

随机推荐

  1. 普通用户操作tomcat项目时报:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

    在使用普通用户更新tomcat项目适合出现这个信息,Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At ...

  2. Application_Start事件中用Timer做一个循环任务

    protected void Application_Start(object sender, EventArgs e) { System.Timers.Timer timer = new Syste ...

  3. [luogu4242] 树上的毒瘤

    题目描述 这棵树上有n个节点,由n−1条树枝相连.初始时树上都挂了一个毒瘤,颜色为ci.接下来Salamander将会进行q个操作. Salamander有时会修改树上某个点到另外一个点的简单路径上所 ...

  4. 洛谷 P2485 [SDOI2011]计算器 解题报告

    P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...

  5. Codeforces 934.A A Compatible Pair

    A. A Compatible Pair time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. SublimeText3自动补全python提示

    1.SublimeText3下载地址 https://www.sublimetext.com/3 2.安装SublimeText3 3.安装SublimeCodeIntel (1)打开SublimeT ...

  7. 51Nod 1048 整数分解为2的幂 V2

    题目链接 分析: $O(N)$和$O(NlogN)$的做法很简单就不写了...%了一发神奇的$O(log^3n*$高精度$)$的做法... 考虑我们只能用$2$的整次幂来划分$n$,所以我们从二进制的 ...

  8. matlab-bgl 工具包配置环境 TDM-GCC-64 mex

    Windows 64 + Matlab 64 MEX混合编程初步: http://blog.csdn.net/enjoyyl/article/details/46545263 使用的是 TDM-GCC ...

  9. MFC数据类型转换 _itoa atoi、atof、itoa、itow _itoa_s

    _itoa 功能:把一整数转换为字符串 用法:char * _itoa(int value, char *string, int radix); 详细解释: _itoa是英文integer to ar ...

  10. 软中断网卡处理&Linux高性能外部设备处理机制&SMP

    转载:http://blog.csdn.net/freas_1990/article/details/9238183 看了一些linux网卡驱动的处理技术,对有些概念还是无法理解,突然搜到这篇文章,挺 ...