SQL Server에서 사용자 정의 테이블 유형 변경
SQL Server에서 사용자 정의 테이블 유형을 어떻게 변경할 수 있습니까?
내가 아는 한 테이블 유형을 변경 / 수정하는 것은 불가능하며 다른 이름으로 유형을 만든 다음 이전 유형을 삭제하고 새 이름으로 수정할 수 있습니다.
jkrajes에 대한 크레딧
msdn에 따라 '사용자 정의 테이블 유형 정의를 만든 후에는 수정할 수 없습니다'와 같습니다.
이것은 일종의 해킹이지만 작동하는 것 같습니다. 다음은 테이블 유형을 수정하는 단계와 예입니다. 한 가지 참고 사항은 테이블 유형에 대한 변경 사항이 해당 개체 (일반적으로 프로 시저)에 대한 주요 변경 인 경우 sp_refreshsqlmodule이 실패한다는 것입니다.
sp_rename
테이블 유형의 이름을 바꾸는 데 사용 합니다. 일반적으로 이름 시작 부분에 z를 추가합니다.- 원래 이름과 테이블 유형에 필요한 수정 사항으로 새 테이블 유형을 만듭니다.
- 각 종속성을 단계별로 실행하고 실행
sp_refreshsqlmodule
하십시오. - 이름이 변경된 테이블 유형을 삭제하십시오.
EXEC sys.sp_rename 'dbo.MyTableType', 'zMyTableType';
GO
CREATE TYPE dbo.MyTableType AS TABLE(
Id INT NOT NULL,
Name VARCHAR(255) NOT NULL
);
GO
DECLARE @Name NVARCHAR(776);
DECLARE REF_CURSOR CURSOR FOR
SELECT referencing_schema_name + '.' + referencing_entity_name
FROM sys.dm_sql_referencing_entities('dbo.MyTableType', 'TYPE');
OPEN REF_CURSOR;
FETCH NEXT FROM REF_CURSOR INTO @Name;
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC sys.sp_refreshsqlmodule @name = @Name;
FETCH NEXT FROM REF_CURSOR INTO @Name;
END;
CLOSE REF_CURSOR;
DEALLOCATE REF_CURSOR;
GO
DROP TYPE dbo.zMyTableType;
GO
경고:
이것은 데이터베이스를 파괴 할 수 있으므로 먼저 개발 환경에서 테스트해야합니다.
다음은 지루함을 최소화하고 오류가 발생하기 쉬운 반자동 스크립트 나 값 비싼 도구가 필요하지 않은 간단한 단계입니다.
개체 탐색기 세부 정보 창에서 여러 개체에 대한 DROP / CREATE 문을 생성 할 수 있습니다 (이 방식으로 생성하면 DROP 및 CREATE 스크립트가 그룹화되어 Drop 및 Create 작업 사이에 논리를 쉽게 삽입 할 수 있음).
- 문제가 발생할 경우를 대비하여 데이터베이스를 백업하십시오!
- 모든 종속성에 대해 DROP / CREATE 문을 자동으로 생성합니다 (또는 종속성 찾기의 지루함을 없애기 위해 모든 "프로그래밍"개체에 대해 생성).
- DROP 및 CREATE [dependencies] 문 (모든 DROP 후, 모든 CREATE 이전) 사이에 생성 된 DROP / CREATE [테이블 유형] 문을 삽입하여 CREATE TYPE으로 필요한 변경을 수행합니다.
- 모든 종속성 / UDTT를 삭제 한 다음 [변경된 UDTT] / 종속성을 다시 만드는 스크립트를 실행합니다.
인프라 아키텍처를 변경하는 것이 합리적 일 수있는 소규모 프로젝트가있는 경우 사용자 정의 테이블 유형을 제거하는 것이 좋습니다. Entity Framework 및 유사한 도구를 사용하면 데이터 논리의 전부는 아니지만 대부분을 유지 관리하기 쉬운 코드 기반으로 이동할 수 있습니다.
If you can use a Database project in Visual Studio, you can make your changes in the project and use schema compare to synchronize the changes to your database.
This way, dropping and recreating the dependent objects is handled by the change script.
Simon Zeinstra has found the solution!
But, I used Visual Studio community 2015 and I didn't even have to use schema compare.
Using SQL Server Object Explorer, I found my user-defined table type in the DB. I right-mouse clicked on the table-type and selected . This opened a code tab in the IDE with the TSQL code visible and editable. I simply changed the definition (in my case just increased the size of an nvarchar field) and clicked the Update Database button in the top-left of the tab.
안녕하세요 Presto! -SSMS 및 udtt 정의의 빠른 확인이 수정되었습니다.
훌륭합니다-Simon에게 감사합니다.
당신은 당신의 유형을 변경 / 수정할 수 없습니다. 기존을 삭제하고 올바른 이름 / 데이터 유형으로 다시 생성하거나 새 열을 추가해야합니다.
이전 테이블 유형을 삭제하고 새 유형을 만들어야합니다. 그러나 종속성 (이를 사용하는 모든 저장 프로 시저)이있는 경우 삭제할 수 없습니다. 나는 한 다른 답변을 게시 테이블 테이블을 수정 한 다음 저장 프로 시저를 복원, 일시적으로 떨어지는 모든 저장 프로 시저의 프로세스를 자동화하는 방법을.
참고 URL : https://stackoverflow.com/questions/11410722/altering-user-defined-table-types-in-sql-server
'Nice programing' 카테고리의 다른 글
JavaScript에서 확장 메서드를 작성하려면 어떻게해야합니까? (0) | 2020.11.01 |
---|---|
Ruby의 % q / % Q 인용 방법의 사용 사례는 무엇입니까? (0) | 2020.11.01 |
조건부 이동이 분기 예측 실패에 취약하지 않은 이유는 무엇입니까? (0) | 2020.11.01 |
방랑자는 기본적으로 안전하지 않습니까? (0) | 2020.11.01 |
AngularJS 문서가 모델 지시어에 점을 사용하지 않는 이유는 무엇입니까? (0) | 2020.11.01 |