加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 14:17:44 所属栏目:MsSql教程 来源:网络整理
导读:原文: MSSQLSERVER数据库- 慎用SELECT INTO复制表 很多时候我们习惯于用SELECT INTO复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO 复制表或表结构的时候,只是得到了一个“外壳”,就像
原文: MSSQLSERVER数据库- 慎用SELECT INTO复制表

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

下面给个脚本例子,给大家演示下SELECT INTO复制表或表结构时,没有得到原表的主键、外键、约束....

USE [MyAssistant]
GO

SET ANSI_NULLS ON
GO

--创建
IF OBJECT_ID(NGroups) 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,GroupID )
VALUES  ( Kerry,312ddfjdf,1,1          )
 
INSERT  INTO dbo.Users( UserName,GroupID )
VALUES  ( test,0,3   )

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

SELECT?*?INTO?TestUser?FROM??dbo.Users

?

?

?

转载自:http://www.cnblogs.com/kerrycode/archive/2010/10/12/1848650.html#

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读