열 변경, 기본 제약 조건 추가
테이블이 있고 열 중 하나가 datetime 유형의 "날짜"입니다.이 열에 기본 제약 조건을 추가하기로 결정했습니다.
Alter table TableName
alter column dbo.TableName.Date default getutcdate()
이 경우 오류가 발생합니다.
'.' 근처에 잘못된 구문이 있습니다.
여기서 분명히 잘못된 것을 본 사람이 있습니까?제가 놓치고 있는 것은 (컬럼의 더 좋은 이름이 있는 것 이외)
이거 드셔보세요
alter table TableName
add constraint df_ConstraintNAme
default getutcdate() for [Date]
예
create table bla (id int)
alter table bla add constraint dt_bla default 1 for id
insert bla default values
select * from bla
또한 기본 제약 조건의 이름을 지정해야 합니다.나중에 떨어뜨리는 건 골칫거리일 거예요. 왜냐하면 그 이상한 시스템 이름 중 하나가...참고 항목: SQL Server에서 기본 제약 조건의 이름을 지정하는 방법 및 이름을 지정하지 않고 기본 제약 조건을 삭제하는 방법
예약된 단어는 대괄호로 묶어서 다음 종류의 오류를 방지할 수 있습니다.
dbo.TableName.[Date]
실제로 아래 예시와 같이 해야 합니다.이 예에서는 문제 해결에 도움이 됩니다.
drop table ABC_table
create table ABC_table
(
names varchar(20),
age int
)
ALTER TABLE ABC_table
ADD CONSTRAINT MyConstraintName
DEFAULT 'This is not NULL' FOR names
insert into ABC(age) values(10)
select * from ABC
아래의 저장 프로시저를 사용하여 열의 기본값을 업데이트합니다.
새 기본값을 추가하기 전에 열의 이전 기본값을 자동으로 제거합니다.
사용 예:
-- Update default to be a date.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','getdate()';
-- Update default to be a number.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column,'6';
-- Update default to be a string. Note extra quotes, as this is not a function.
exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','''MyString''';
저장 프로시저:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Sample function calls:
--exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','ColumnName','getdate()';
--exec [dbol].[AlterDefaultForColumn] '[dbo].[TableName]','Column,'6';
--exec [dbo].[AlterDefaultForColumn] '[dbo].[TableName]','Column','''MyString''';
create PROCEDURE [dbo].[ColumnDefaultUpdate]
(
-- Table name, including schema, e.g. '[dbo].[TableName]'
@TABLE_NAME VARCHAR(100),
-- Column name, e.g. 'ColumnName'.
@COLUMN_NAME VARCHAR(100),
-- New default, e.g. '''MyDefault''' or 'getdate()'
-- Note that if you want to set it to a string constant, the contents
-- must be surrounded by extra quotes, e.g. '''MyConstant''' not 'MyConstant'
@NEW_DEFAULT VARCHAR(100)
)
AS
BEGIN
-- Trim angle brackets so things work even if they are included.
set @COLUMN_NAME = REPLACE(@COLUMN_NAME, '[', '')
set @COLUMN_NAME = REPLACE(@COLUMN_NAME, ']', '')
print 'Table name: ' + @TABLE_NAME;
print 'Column name: ' + @COLUMN_NAME;
DECLARE @ObjectName NVARCHAR(100)
SELECT @ObjectName = OBJECT_NAME([default_object_id]) FROM SYS.COLUMNS
WHERE [object_id] = OBJECT_ID(@TABLE_NAME) AND [name] = @COLUMN_NAME;
IF @ObjectName <> ''
begin
print 'Removed default: ' + @ObjectName;
--print('ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @ObjectName)
EXEC('ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @ObjectName)
end
EXEC('ALTER TABLE ' + @TABLE_NAME + ' ADD DEFAULT (' + @NEW_DEFAULT + ') FOR ' + @COLUMN_NAME)
--print('ALTER TABLE ' + @TABLE_NAME + ' ADD DEFAULT (' + @NEW_DEFAULT + ') FOR ' + @COLUMN_NAME)
print 'Added default of: ' + @NEW_DEFAULT;
END
이 저장 프로시저가 제거하는 오류
이미 존재하는 컬럼에 기본값을 추가하려고 하면 다음 오류가 나타납니다(이 저장된 proc를 사용하는 경우 표시되지 않습니다).
-- Using the stored procedure eliminates this error:
Msg 1781, Level 16, State 1, Line 1
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
change TableName 드롭 제약조건 DF_TableName_입력 시
alter TableName 제약조건 DF_TableName_ 추가WhenEntered의 기본 getutcdate()
JohnH의 코멘트처럼 오브젝트명에 컬럼 타입을 사용하지 마십시오!헷갈려.그리고 가능하면 괄호를 사용하세요.
이것을 시험해 보세요.
ALTER TABLE [TableName]
ADD DEFAULT (getutcdate()) FOR [Date];
테이블 이름을 두 번 지정했습니다.ALTER TABLE 부품은 테이블에 이름을 붙입니다.시행: TableName alter 컬럼 [Date] 기본 getutcdate() 변경
언급URL : https://stackoverflow.com/questions/2095289/alter-column-add-default-constraint
'programing' 카테고리의 다른 글
| UNION [ALL]에서 SELECT INTO 조항을 사용할 수 있습니까? (0) | 2023.04.07 |
|---|---|
| Dapper를 사용하여 삽입된 ID를 반환하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
| LIKE 필터에 밑줄 문자를 사용하면 모든 결과가 나타나는 이유는 무엇입니까? (0) | 2023.04.07 |
| 외부 키 제약 조건이 테이블을 참조하고 있으므로 테이블을 잘라낼 수 없습니까? (0) | 2023.04.07 |
| 외부 키 제약이 SQL 서버에 있는 경우에만 어떻게 삭제합니까? (0) | 2023.04.07 |