zoukankan      html  css  js  c++  java
  • Select into 的特点

    使用 Select * into NewTable From OldTable  来生成新表的技能已经使用得好熟练了~但是有些东西还是需要注意一下。下面我就来分享几个栗子

    使用select into 的时候会将列属性复制到新表里面。

    CREATE TABLE B1(ID INT IDENTITY,Col1 NVARCHAR(50))
    
    GO
    
    INSERT INTO dbo.B1
            ( Col1 )
    VALUES  ( 'A')
    
    GO 5
    
    SELECT * INTO Tmp_1 FROM dbo.B1 a 
    
    DROP TABLE Tmp_1

    使用select into 之后使用sp_help 查看 Tmp_1 的信息,查出是和原表的架构一直的。包括自增列ID 的属性也一同复制到新表里面。所以如果直接使用 insert into Tmp_1 (ID,Col1 ) values (10,'B') 这种。那么数据库就会抛出日常熟悉的错误

    在 IDENTITY_INSERT 为off的情况下是不能显示插入标识值的错误,如果要硬来,那么请把IDENTITY_INSERT 选项打开。

    但是注意,标识列是可以复制,但是约束(像主键啊,外键啊,默认值这些),触发器这些类型,都是不会复制到新表里面的。

    CREATE TABLE B1(ID INT IDENTITY primary key,Col1 NVARCHAR(50))  --这里添加了主键的约束
    
    GO
    
    INSERT INTO dbo.B1
            ( Col1 )
    VALUES  ( 'A')
    
    GO 5
    
    SELECT * INTO Tmp_1 FROM dbo.B1 a 
    
    DROP TABLE Tmp_1

    然后我们重新看回 Tmp_1 的表属性,ID列仅仅是一个自增列,并没有主键约束(其他约束类型和触发器可以这样进行测试)

    看到这里,我重新看会文档,发现有几个条件出现的时候,复制的新表并不会继承源表的自增列属性

    1、select into 的语句里面包含了连接(Join) 。

    2、使用Union 查询出来的结果

    3、标识列在查询语句中多次出现

    4、查询的标识列参与了运算

    5、来自远程数据源

    虽然是一个很小很小的东西,也很有意思~

  • 相关阅读:
    普林斯顿宣布开源 25 核处理器
    瑞芯微RK3399宣布系统开源,进入百余种行业市场!
    Qt浅谈之二十App自动重启及关闭子窗口
    学在LINUX下编程(各种情况比较详细)
    ASP.NET开发规范:OWIN
    IDEA14中安装go语言插件
    sqlserver不能直接create table as select
    表复制语句select into from 与 insert into select 区别鉴赏
    实现Asp.net Mvc分布式Session Redis群集
    大小端模式
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5695126.html
Copyright © 2011-2022 走看看