SQL Server에서 기본값 수정
SQL Server 2008에서 SQL 문을 사용하여 열의 기본값을 변경하려고 합니다.테이블을 만들거나 열을 추가할 때 기본값을 설정하는 방법은 많이 찾았지만 열이 이미 존재하면 설정/수정하는 방법은 찾지 못했습니다.
다음을 추가하여 설정할 수 있습니다.
ALTER TABLE MyTable ADD MyColumn int NOT NULL DEFAULT 0
그리고 그것은 효과가 있지만, 제가 나중에 수정하려고 하면:
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL DEFAULT -1
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL SET DEFAULT -1
그것들 중 어느 것도 구문적으로 정확하지 않습니다. 그리고 저는 어디에서도 제가 가장하는 것을 할 수 있는 구문을 찾지 못합니다.새 열을 추가하고 이전 열에서 값을 복사한 다음 이전 열과 새 열을 제거하여 변경하는 것이 유일한 옵션입니다. 하지만 저는 그렇게 생각하지 않습니다.
간단한 문장 하나로 내가 원하는 것을 할 수 있는 방법이 있을까요?
감사해요.
기본값이 있는 열을 추가하면 기본 제약 조건이 생성됩니다.
create table _temp
( x int default 1)
sp_help _temp
결과:
constraint_type constraint_name
DEFAULT on column x DF___temp__x__5A3B20F9
따라서 열 정의의 default 절은 제약 조건을 생성하기 위한 바로 가기일 뿐입니다. 기본값은 열의 고유 속성이 아닙니다.이미 존재하는 열의 기본값을 수정하려면 먼저 제약 조건을 삭제해야 합니다.
alter table _temp drop constraint DF___temp__x__5A3B20F9
그런 다음 새 기본 제약 조건을 만듭니다.
alter table _temp add constraint DF_temp_x default 2 for x
DECLARE @Command nvarchar(max), @ConstraintName nvarchar(max), @TableName nvarchar(max), @ColumnName nvarchar(max)
SET @TableName = 'TableName'
SET @ColumnName = 'ColumnName'
SELECT @ConstraintName = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(@TableName)
AND parent_column_id = columnproperty(object_id(@TableName), @ColumnName, 'ColumnId')
SELECT @Command = 'ALTER TABLE ' + @TableName + ' DROP CONSTRAINT ' + @ConstraintName
EXECUTE sp_executeSQL @Command
SELECT @Command = 'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT ' + @ConstraintName + ' DEFAULT 1 FOR ' + @ColumnName
EXECUTE sp_executeSQL @Command
DEFAULT 제약 조건을 삭제하고 이와 같은 새 제약 조건을 추가해야 합니다.
alter table Mytable
drop constraint <constraint name>
go
alter table MyTable
add constraint df_MyTable_MyColumn default -1 for MyColumn
go
sp_helpconstraint MyTable을 사용하여 제약 조건 이름 가져오기
DEFAULT
제약 조건입니다.사용할 항목ALTER TABLE ADD CONSTRAINT
.
ALTER TABLE MyTable
ADD CONSTRAINT <constraint name>
DEFAULT -1 FOR MyColumn
다음과 같이 현재 제약 조건을 먼저 삭제해야 합니다.
ALTER TABLE MyTable
DROP CONSTRAINT <constraint name>
열의 기본값이 없는 경우 열에 대한 기본값
DECLARE @defaultLock VARCHAR(100)
SELECT @defaultLock = (SELECT object_definition(default_object_id) AS definition FROM sys.columns WHERE name = 'Lock' AND object_id = object_id('dbo.Positions'))
IF @defaultLock IS NULL
ALTER TABLE Positions ADD DEFAULT (0) FOR Lock
기존 데이터베이스의 많은 필드에 대한 기본 제약 조건을 변경해야 했기 때문에 한 번에 변경하기를 원했습니다.이게 도움이 되길...
select 'USE ' + DB_NAME()
SELECT 'ALTER TABLE '+ src3.name + '.' + src1.name +' drop constraint '+ src.name + '
ALTER TABLE ' + src3.name + '.' + src1.name +' ADD CONSTRAINT '+ src.name + ' DEFAULT getutcdate() FOR ' + src2.name -- amend default constrint accordingly.
FROM sys.tables src1
inner join sys.schemas src3
on src3.schema_id = src1.schema_id
inner join sys.columns src2
on src2.object_id = src1.object_id
inner join sys.default_constraints src
on src.parent_column_id = src2.column_id
and src.parent_object_id = src1.object_id
WHERE (-- pick up existing constraint definition
src.definition like '%getdate%'
or src.definition like '%current\_timestamp%' escape '\'
)
and src1.type = 'U'
order by src3.name + '.' + src1.name
쿼리를 수정하고 출력을 다른 탭에 복사하여 실행해야 합니다.
언급URL : https://stackoverflow.com/questions/15547210/modify-default-value-in-sql-server
'programing' 카테고리의 다른 글
기존에 없는 CSS 클래스를 사용할 수 있습니까? (0) | 2023.08.12 |
---|---|
셀레늄 - 크롬 드라이버 실행 파일은 PATH에 있어야 합니다. (0) | 2023.08.12 |
'input' 요소의 'change' 이벤트와 'input' 이벤트 간의 차이 (0) | 2023.08.12 |
Oracle/TOAD의 컴파일 오류에 대한 정보를 가져오는 방법 (0) | 2023.08.12 |
데이터를 3세트(교육, 검증 및 테스트)로 분할하는 방법은 무엇입니까? (0) | 2023.08.12 |