대답은 '예, 그것은 기술적으로 가능하지만, 당신은 두통이 그렇게해야합니다 그것을 실행하고 설정하는 데 시간이 오래 걸릴 것입니다.
하나 : 여기가 발생하고 '저장'을 클릭하면 실행되는 스크립트의 예 :/복사/드롭/이것은 SQL Server가 그래픽 인터페이스에서하고있는 사실은 무엇
이름 바꾸기 만들기 테이블의 시작 부분에 새 열을 추가 한 후 버튼을 누릅니다.
/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_SomeTable
(
MyNewColumn int NOT NULL,
OriginalIntColumn int NULL,
OriginalVarcharColumn varchar(100) NULL
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON
GO
IF EXISTS(SELECT * FROM dbo.SomeTable)
EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF
GO
DROP TABLE dbo.SomeTable
GO
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT'
GO
GO
COMMIT
2 :이 방법은 기본적으로 당신의 새로운 컬럼의 권리 '에 추가 할 기존 컬럼의 복사본을 만드는 작업이 포함됩니다
RENAME/COLUMN/UPDATE/DROP 열을 추가, 데이터를 새 열로 전송 한 다음 원본을 삭제하고 새 열의 이름을 바꿉니다. 이것은 당신이 그들을 repoint해야하기 때문에 당신이 가지고있는 어떤 인덱스 나 제약으로 혼란을 일으킬 것입니다. 기술적으로 가능하지만 개발과 실행 측면에서 시간이 많이 걸립니다.
CREATE TABLE MyTest (a int, b int, d int, e int)
INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)
SELECT * FROM MyTest -- your current table
ALTER TABLE MyTest ADD c int -- add a new column
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move
ALTER TABLE MyTest ADD e_new int
UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns
ALTER TABLE MyTest DROP COLUMN d -- remove the originals
ALTER TABLE MyTest DROP COLUMN e
EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns
EXEC SP_RENAME 'MyTest.e_new', 'e';
SELECT * FROM MyTest
DROP TABLE MyTest -- clean up the sample
세 : 그것은
이 꽤나 질서의 감각을 기분을 상하게와 라이브 ...하지만 때로는, 그냥 가치가 개편되지 않습니다.
아니면 모든 테이블 위에 뷰를 생성해야하는 이유는 무엇입니까? –
관련 : http://stackoverflow.com/q/1605144/12484 –