慎用SELECT INTO复制表
生活随笔
收集整理的這篇文章主要介紹了
慎用SELECT INTO复制表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多時候我們習慣于用SELECT INTO 復制一個表或表結構,因為它方便,快捷,而且在某些情況下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO 復制表或表結構的時候,只是得到了一個“外殼”,就像克隆人一樣,只是得到了一個軀體,個人的意識、回憶都不會克隆的。像原表的主鍵、外鍵、約束、觸發 器、索引都不會被復制過來。這點要注意哦,在某些情況下,沒有注意的話,會照成“災難后果的”,下面給個腳本例子,給大家演示下SELECT INTO復制表或表結構時,沒有得到原表的主鍵、外鍵、約束....
準備數據Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE [MyAssistant] GOSET ANSI_NULLS ON GO--創建 IF OBJECT_ID(N'Groups') IS NOT NULLBEGINPRINT 'This table have been existed';DROP TABLE Groups;END ELSEBEGINCREATE 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', '普通部門組'); GODROP 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) ) GOALTER TABLE [dbo].[Users] ADD CONSTRAINT [DF_Users_Sex] DEFAULT ((0)) FOR [Sex] GOCREATE 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 GOINSERT 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 )
準備數據Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE [MyAssistant] GOSET ANSI_NULLS ON GO--創建 IF OBJECT_ID(N'Groups') IS NOT NULLBEGINPRINT 'This table have been existed';DROP TABLE Groups;END ELSEBEGINCREATE 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', '普通部門組'); GODROP 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) ) GOALTER TABLE [dbo].[Users] ADD CONSTRAINT [DF_Users_Sex] DEFAULT ((0)) FOR [Sex] GOCREATE 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 GOINSERT 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复制表的全部內容,希望文章能夠幫你解決所遇到的問題。