programing

SQL 2008에서 테이블을 삭제하지 않고 열을 변경하는 방법

closeapi 2023. 9. 13. 22:37
반응형

SQL 2008에서 테이블을 삭제하지 않고 열을 변경하는 방법

열 유형을 say int에서 real로 변경할 때 SQL 2008에서 갑자기 테이블을 삭제하려는 이유는 무엇입니까?제가 아는 한 SQL 2005에서는 이런 일이 없었습니다.어떤 통찰력이라도 도움이 될 것입니다.

최고의 답이 그렇게 오랫동안 여기에 있었다는 것이 믿기지 않습니다. 그것은 매우 위험한 충고입니다!

테이블을 떨어뜨리지 않고 제자리에서 수행할 수 있는 작업은 몇 가지가 있습니다.

  • varchar 열 https://dba.stackexchange.com/questions/5211/changing-column-width 확장
  • 열을 null로 지정합니다(반대는 아님).
  • sp_rename을 사용하여 열 이름 변경

테이블을 떨어뜨리지 않고는 열을 바꿀 수 없는 상황에 처했다면, 당신은 보통 다음과 같은 방법을 사용할 수 있습니다.SELECT INTO쿼리를 사용하여 데이터를 새 테이블에 투영한 다음 이전 테이블(일시적으로 제약 조건을 비활성화함)을 드롭한 다음 투영된 테이블의 이름을 바꿉니다.이 경우 유지보수를 위해 데이터베이스를 오프라인으로 전환해야 합니다.

SQL Server 2008에서 Tools > > Options로 이동합니다.작은 창에서 "디자이너"를 누릅니다."필요한 변경 내용 저장 금지..."를 선택 취소합니다.

=====

2015년 9월 4일 편집

위의 질문에 설명된 상황을 해결하는 방법을 설명하기 위해 오래전에 여기에 이 답변을 추가했습니다.그 이후로 아래 쓰레드의 사용자들은 당시 제가 추천했던 방식으로 일을 하는 것에 대해 몇 가지 우려를 드러냈습니다.기본적으로, 제가 설명한 해결책은 몇몇 시나리오에서 문제가 될 수 있습니다.그런 다음 다른 사용자의 댓글을 확인하고 자신에게 가장 적합한 솔루션을 선택하기 위해 계속해서 읽어보는 것을 제안합니다.

사용 방법은 다음과 같습니다.

-- Add new column
ALTER TABLE MyTable
ADD Description2 VARCHAR(MAX)
GO

-- Copy data to new column (probably with modifications)
Update MyTable
SET Description2 = Description
GO

-- Drop old column
ALTER TABLE MyTable
DROP COLUMN Description
GO

-- Rename new column to the original column's name.
sp_RENAME 'MyTable.Description2' , 'Description', 'COLUMN'
GO
  1. 데이터를 새 열에 복사합니다.
  2. 이전 열을 삭제합니다.
  3. 새 열의 이름을 이전 열의 이름으로 바꿉니다.

저도 같은 문제가 있습니다.내 계정은 다른 sa 계정을 사용하려고 하면 권한이 있지만 작동합니다.아무래도 제 계정은 변경할 수 있는 기능이 없는 것 같습니다.아직 조사중이지만 허가 문제입니다.

업데이트:

설명할 수는 없지만 이렇게 했습니다. 제 계정이 속한 도메인 그룹이 두 개 있습니다.하나는 새로운 AD 도메인 그룹이었고 다른 하나는 NT legay 도메인 그룹이었습니다.레거시 도메인 그룹을 제거한 후 테이블을 성공적으로 변경할 수 있었습니다.두 그룹 모두 "사"특권을 가지고 있었단 걸 명심하세요.

명령을 변경하면 성공한다는 동작이었지만 테이블 위에서는 아무것도 변경되지 않았습니다.그런 다음 설계자를 통해 수동으로 필드를 변경하려고 하면 테이블을 삭제하고 다시 만들어야 하는 경우 변경할 수 없다고 불평했습니다.저는 도구에서 설정을 찾았고 그것을 끌 수 있었습니다.하지만 이 테이블은 크기 때문에 이렇게 하기에는 좋지 않습니다.나는 다른 사람들에게 그것을 반대하라고 충고하고 싶습니다.

허가 문제였군요어떻게 설명할 수는 없지만 다른 사람에게 도움이 되었으면 합니다.

테이블을 완전히 떨어뜨리지 않고 이것을 할 수 있는 또 다른 방법은

  1. 열 값을 백업합니다.
  2. 열이 null을 허용하지 않는 경우 null로 만듭니다.행을 통해 열 값을 null로 설정합니다.

    update tablename set columnname = null 
    
  3. 열 삭제
  4. 삭제한 열과 이름이 같고 원하는 유형의 열을 새로 삽입합니다.
  5. 저장된 데이터를 이 열에 삽입합니다.

언급URL : https://stackoverflow.com/questions/460163/how-to-change-a-column-without-dropping-a-table-in-sql-2008

반응형