기존 테이블에서 열을 제거하는 방법?
기존 테이블에서 열을 제거하는 방법?
나는 테이블 MEN
이 Fname
있고Lname
나는 제거해야합니다 Lname
어떻게합니까?
ALTER TABLE MEN DROP COLUMN Lname
일반적인:
ALTER TABLE table_name DROP COLUMN column_name;
귀하의 경우 :
ALTER TABLE MEN DROP COLUMN Lname;
귀하의 예는 간단하고 추가 테이블 변경이 필요하지 않지만 일반적으로 이것은 간단하지 않습니다.
이 열이 다른 테이블에서 참조되는 경우 다른 테이블 / 열로 수행 할 작업을 파악해야합니다. 한 가지 옵션은 외래 키를 제거하고 참조 된 데이터를 다른 테이블에 유지하는 것입니다.
또 다른 옵션은 모든 참조 열을 찾아 더 이상 필요하지 않은 경우 제거하는 것입니다.
이러한 경우 실제 문제는 모든 외래 키를 찾는 것입니다. 시스템 테이블을 쿼리하거나 ApexSQL 검색 (무료) 또는 Red Gate Dependency 추적기 (프리미엄이지만 더 많은 기능) 와 같은 타사 도구를 사용하여이를 수행 할 수 있습니다 . 외래 키에 전체 스레드가 있습니다.
이것이 정답입니다.
ALTER TABLE MEN DROP COLUMN Lname
A는하지만 ... CONSTRAINT
온 존재 COLUMN
, 당신은해야한다 첫 번째는, 당신은 수있을 것 . 를 삭제하려면 다음을 실행하십시오.DROP
CONSTRAINT
DROP
COLUMN
CONSTRAINT
ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}
에서 SQL 서버 2016 는 새로운 DIE 문을 사용할 수 있습니다.
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
위의 쿼리는 테이블에있는 drops
경우에만 열을 다시 exists
실행할 수 있습니다. 그렇지 않으면 오류가 발생하지 않습니다.
큰 IF
래퍼를 사용하여 column
삭제하기 전에 존재 여부를 확인하는 대신 위의 DDL
명령문을 실행할 수 있습니다 .
문제는 존재하지 않는 테이블에서만 열을 삭제할 수 있습니까? ;-)
BEGIN TRANSACTION
IF exists (SELECT * FROM sys.columns c
INNER JOIN sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
BEGIN TRY
ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
END TRY
BEGIN CATCH
print 'FAILED!'
END CATCH
ELSE
BEGIN
SELECT ERROR_NUMBER() AS ErrorNumber;
print 'NO TABLE OR COLUMN FOUND !'
END
COMMIT
이것에 대한 간단한 대답은 이것을 사용하는 것입니다.
ALTER TABLE MEN DROP COLUMN Lname;
다음과 같이 둘 이상의 열을 지정할 수 있습니다.
ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;
SQL Server 2016부터는 열이있는 경우에만 열을 삭제할 수도 있습니다. 이렇게하면 관심이없는 것으로 인해 오류가 발생하지 않습니다.
ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;
열을 삭제하기위한 전제 조건이 있습니다. 삭제 된 열은 다음과 같습니다.
- 인덱스에서 사용
- CHECK, FOREIGN KEY, UNIQUE 또는 PRIMARY KEY 제약 조건에서 사용
- DEFAULT와 연관
- 규칙에 구속
위의 사항 중 하나라도 해당되는 경우 먼저 해당 연결을 삭제해야합니다.
또한 열을 삭제해도 테이블의 클러스터형 인덱스가 다시 작성 될 때까지 하드 디스크에서 공간을 회수하지 않습니다. 따라서 다음과 같이 테이블 재 구축 명령을 사용하여 위의 내용을 따르는 것이 좋습니다.
ALTER TABLE MEN REBUILD;
마지막으로 일부 사람들은이 속도가 느릴 수 있으며 지속 시간 동안 테이블을 잠글 것입니다. 원하는 구조로 새 테이블을 만들고 다음과 같이 이름을 바꿀 수 있습니다.
SELECT
Fname
-- Note LName the column not wanted is not selected
INTO
new_MEN
FROM
MEN;
EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';
DROP TABLE old_MEN;
그러나 첫 번째 선택 명령과 마지막 이름 바꾸기 명령 사이에 삽입 된 행의 데이터 손실에 대한 창이 있습니다.
기존 테이블에 열을 추가하려면
ALTER TABLE table_name
ADD
column_name DATATYPE NULL
기존 테이블에서 열을 삭제하려면 다음을 수행하십시오.
ALTER TABLE table_name
DROP COLUMN column_name
이것은 SSMS GUI를 통해서도 가능합니다. 이 방법의 좋은 점은 해당 열에 관계가 있으면 경고하고 자동으로 삭제할 수도 있다는 것입니다.
- 다음과 같이 디자인 뷰에 테이블을 놓습니다 (테이블을 마우스 오른쪽 버튼으로 클릭).
- 테이블의 디자인 뷰에서 열을 마우스 오른쪽 버튼으로 클릭하고 "열 삭제"를 클릭하십시오.
앞에서도 언급했듯이, 삭제해야 할 관계가있는 경우이 시점에서도 관계를 삭제할 것인지 묻습니다. 열을 삭제하려면 그렇게해야합니다.
C #을 사용하고 Identity 열이 int이면 값을 제공하지 않고 int의 새 인스턴스를 만듭니다.
[identity_column] = 새로운 int ()
통사론:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
예를 들어 :
alter table Employee drop column address;
참고 URL : https://stackoverflow.com/questions/5626344/how-to-remove-a-column-from-an-existing-table
'development' 카테고리의 다른 글
Android에서 '앱이 설치되지 않았습니다'오류 (0) | 2020.02.26 |
---|---|
Java 가져 오기 명령문에 와일드 카드를 사용하는 이유가 무엇입니까? (0) | 2020.02.26 |
NSMutableArray를 NSArray로 어떻게 변환합니까? (0) | 2020.02.26 |
변수가 파이썬에 정의되어 있는지 확인 (0) | 2020.02.26 |
알파벳순으로 NSArray를 정렬하는 방법은 무엇입니까? (0) | 2020.02.26 |