your programing

열 nvarchar 길이를 드롭 없이 변경하는 방법

lovepro 2023. 8. 10. 22:45
반응형

열 nvarchar 길이를 드롭 없이 변경하는 방법

테이블 "Post"의 "Body" 열 길이를 다음과 같이 변경하려고 합니다.

ALTER TABLE Post ALTER COLUMN Body nvarchar(8000) NOT NULL;

이 열은 nvarchar(4000)로 정의되며 다음 오류가 발생합니다.

Msg 2717, Level 16, State 2, Line 1 'Body' 매개 변수에 지정된 크기(8000)가 허용된 최대값(4000)을 초과합니다.

대신 Max를 사용합니다.열이 VARCHAR로 선언된 경우 8000이면 됩니다.

ALTER TABLE Post ALTER COLUMN Body nvarchar(max) NOT NULL;

열에 기본값과 같은 제약 조건 키가 있는 경우 ...을 선택합니다.ext, 먼저 열의 크기를 변경하고 열에 대한 제약 조건을 변경하기 위해 열에서 키 제약 조건을 삭제했습니다.다음 단계를 수행하면 도움이 됩니다.

단계는.

>  ALTER TABLE MESSAGE_INBOX_VIEWERS DROP CONSTRAINT DF_CONST_TEXT
>  ALTER TABLE MESSAGE_INBOX_VIEWERS ALTER COLUMN TEXT NVARCHAR(MAX) 
>  ALTER TABLE MESSAGE_INBOX_VIEWERS ADD CONSTRAINT DF_CONST_TEXT DEFAULT('') FOR TEXT

제약 조건에 대해 다음을 사용할 수 있습니다.

DECLARE @DEFCONSTRAINT VARCHAR(1000);
DECLARE @DropDFConstraitCmd  VARCHAR(1000);
DECLARE @AlterDFColumnCmd VARCHAR(1000);
DECLARE @CreateDFConstraitCmd VARCHAR(1000);
DECLARE @CONSTRAINT_SAYI NUMERIC;
SET @DEFCONSTRAINT=(SELECT name
                      FROM sys.sysobjects
                     WHERE type = 'D' AND OBJECT_NAME(parent_obj) = 'TABLENAME' and name like 'DF__TABLENAME__COLUMNNAME%');
SET @CONSTRAINT_SAYI=(SELECT count(*)
                      FROM sys.sysobjects
                     WHERE type = 'D' AND OBJECT_NAME(parent_obj) = 'TABLENAME' and name like 'DF__TABLENAME__COLUMNNAME%');
SET @DropDFConstraitCmd   = ' ALTER TABLE TABLENAME DROP CONSTRAINT ' +@DEFCONSTRAINT;
SET @AlterDFColumnCmd     = ' ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(max) NOT NULL';
SET @CreateDFConstraitCmd = ' ALTER TABLE TABLENAME ADD CONSTRAINT ' +@DEFCONSTRAINT + ' DEFAULT ('' '') FOR COLUMNNAME ';
if @CONSTRAINT_SAYI > 0
    exec (@DropDFConstraitCmd);
exec (@AlterDFColumnCmd);
exec (@CreateDFConstraitCmd);

대신 NTEXT를 사용하십시오.

ALTER TABLE Post ALTER COLUMN Body NTEXT NOT NULL;

NTEXT는 NVARCHAR와 비슷하지만 많은 양의 텍스트가 필요한 BODY 필드 또는 주석 필드에 맞게 설계되었습니다.

언급URL : https://stackoverflow.com/questions/45845430/how-to-alter-column-nvarchar-length-without-drop

반응형