[SQL] 개체 'DF __ *'는 '*'컬럼에 따라 달라집니다 - 더블로 INT 변경
SQL개체 'DF __ *'는 '*'컬럼에 따라 달라집니다 - 더블로 INT 변경
기본적으로 나는 다음과 같은 특성을 가진 내 EF 데이터베이스에서 테이블을 가지고 :
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
나는 데이터베이스를 업데이트 할 때 나는 다음과 같은 오류가 더블을 할 평가의 INT를 변경할 때 그러나 그것은 잘 작동 :
개체 'DF_Movies_Rating__48CFD27E은'열 '평가'에 따라 달라집니다. 하나 이상의 개체가이 열에 액세스하므로 ALTER TABLE ALTER 열 평가에 실패했습니다.
문제는 무엇입니까?
해결법
-
==============================
1.이 시도:
이 시도:
당신의 필드 유형을 변경하기 전에 제약 DF_Movies_Rating__48CFD27E를 제거합니다.
제약 조건은 일반적으로 DBMS (SQL 서버)에 의해 자동으로 생성됩니다.
아래 그림과 같이 분류 제약 다음 개체 탐색기에서 테이블 속성을 확장 테이블과 연관된 제약 조건을 참조하십시오 :
당신은 필드 유형을 변경하기 전에 제약 조건을 제거해야합니다.
-
==============================
2.이것은 TSQL의 방법입니다
이것은 TSQL의 방법입니다
ALTER TABLE yourtable DROP CONSTRAINT constraint_name -- DF_Movies_Rating__48CFD27E
완성도를 들어,이 그냥 답변으로 @Joe 타 라스의 코멘트를 보여줍니다
-
==============================
3.나는 제약의 출처를 설명하는 응답으로이 추가 해요. 내가 코멘트에 그것을 할 시도했지만 멋지게이 편집에 어려운 : - /
나는 제약의 출처를 설명하는 응답으로이 추가 해요. 내가 코멘트에 그것을 할 시도했지만 멋지게이 편집에 어려운 : - /
기본적 값이 C 럼으로 테이블을 작성 (또는 ALTER) 경우 당신을위한 제약 조건을 생성합니다.
예를 들어 테이블에서 그것은 수 있습니다 :
CREATE TABLE Movie ( ... rating INT NOT NULL default 100 )
그것은 기본적으로 100에 대한 제약 조건을 생성합니다.
대신 작성하는 경우가 너무 좋아
CREATE TABLE Movie ( name VARCHAR(255) NOT NULL, rating INT NOT NULL CONSTRAINT rating_default DEFAULT 100 );
당신이 변질 때 그런 다음 표했다 참조에 쉽게 멋지게라는 이름의 제약을받을.
ALTER TABLE Movie DROP CONSTRAINT rating_default; ALTER TABLE Movie ALTER COLUMN rating DECIMAL(2) NOT NULL; -- sets up a new default constraint with easy to remember name ALTER TABLE Movie ADD CONSTRAINT rating_default DEFAULT ((1.0)) FOR rating;
당신이 열을 변경하고 한 줄의 제약 조건의 이름을, 그래서 당신은 그 마지막이 문을 결합 할 수 있습니다 (당신은 어쨌든이 기존 테이블의 경우에 있습니다)
-
==============================
4.제약 예측할 수없는 이름을 가지고, 당신은 그것의 이름을 (EF 6.1.3에서 테스트되었습니다) 알고 있기없이 그것을 제거하기 위해 특수 스크립트 (DropConstraint를) 쓸 수 있습니다 :
제약 예측할 수없는 이름을 가지고, 당신은 그것의 이름을 (EF 6.1.3에서 테스트되었습니다) 알고 있기없이 그것을 제거하기 위해 특수 스크립트 (DropConstraint를) 쓸 수 있습니다 :
public override void Up() { DropConstraint(); AlterColumn("dbo.MyTable", "Rating", c => c.Double(nullable: false)); } private void DropConstraint() { Sql(@"DECLARE @var0 nvarchar(128) SELECT @var0 = name FROM sys.default_constraints WHERE parent_object_id = object_id(N'dbo.MyTable') AND col_name(parent_object_id, parent_column_id) = 'Rating'; IF @var0 IS NOT NULL EXECUTE('ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [' + @var0 + ']')"); } public override void Down() { AlterColumn("dbo.MyTable", "Rating", c => c.Int(nullable: false)); }
-
==============================
5.MS SQL Studio는 열을 삭제할 때 돌봐하지만 제약 프로그래밍을 삭제해야하는 경우 여기에 간단한 해결책이다
MS SQL Studio는 열을 삭제할 때 돌봐하지만 제약 프로그래밍을 삭제해야하는 경우 여기에 간단한 해결책이다
여기에 기본 제약 조건을 가진 열을 삭제합니다 코드 조각입니다 :
DECLARE @ConstraintName nvarchar(200) SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__') AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns WHERE NAME = N'__ColumnName__' AND object_id = OBJECT_ID(N'__TableName__')) IF @ConstraintName IS NOT NULL EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName) IF EXISTS (SELECT * FROM syscolumns WHERE id=object_id('__TableName__') AND name='__ColumnName__') EXEC('ALTER TABLE __TableName__ DROP COLUMN __ColumnName__')
그냥 적절한 값으로 테이블 이름과 열 이름을 대체합니다. 안전하게 열이 이미 삭제 된 경우에도이 프로그램을 실행할 수 있습니다.
보너스 : 여기에 외래 키 제약 조건의 다른 유형을 삭제하는 코드입니다.
-
==============================
6.우리가 의존하는 열을 삭제하려고 할 때 우리는 이런 종류의 오류를 참조하십시오
우리가 의존하는 열을 삭제하려고 할 때 우리는 이런 종류의 오류를 참조하십시오
와 해당 열의에 의존하는 제약 조건을 삭제 :
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint;
예:
드롭 제약 (DF__Employees__Colf__1273C1CD) :
ALTER TABLE Employees DROP CONSTRAINT DF__Employees__Colf__1273C1CD;
그럼 당신은 열을 드롭 할 수 있습니다 :
Alter Table TableName Drop column ColumnName
-
==============================
7.개방 데이터베이스 테이블 -> 테이블을 확장 -> 제약을 확장하여이 참조
개방 데이터베이스 테이블 -> 테이블을 확장 -> 제약을 확장하여이 참조
-
==============================
8.나는 마이그레이션을 실행하려고이 오류가 있었다 이를 해결하려면 내가 열 이름을 변경하고 사용하여 마이그레이션을 재 생성
나는 마이그레이션을 실행하려고이 오류가 있었다 이를 해결하려면 내가 열 이름을 변경하고 사용하여 마이그레이션을 재 생성
add-migration migrationname -force
패키지 관리자 콘솔한다. 나는 그 실행 할 수 있었다
update-database
성공적으로.
from https://stackoverflow.com/questions/19460912/the-object-df-is-dependent-on-column-changing-int-to-double by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL에서 테이블의 마지막 레코드를 선택하려면? (0) | 2020.05.18 |
---|---|
[SQL] 어떻게 새 행의 고유 ID에서 SQL 테이블하지만 스왑에 기록을 복사합니까? (0) | 2020.05.18 |
[SQL] LINQ to SQL은이 점을 놓치지 않는다? (등 음속) ORM - 매퍼 하위 최적의 솔루션이 아닌가요? (0) | 2020.05.18 |
[SQL] 어떻게 정렬에 데이터베이스의 모든 테이블을 변환하는? (0) | 2020.05.18 |
[SQL] 관계형 데이터베이스 및 그래프 데이터베이스의 비교 (0) | 2020.05.18 |