回答

收藏

SQL Server中的Alter列

技术问答 技术问答 186 人阅读 | 0 人回复 | 2023-09-14

ALTER向现有列添加默认值的语句的正确语法是什么?! x; a0 A' \  z- o% E4 Q
我可以添加没有错误的新列:
5 q0 H3 G! A, ]( b) @: d4 aALTER TABLE tb_TableName ADD Record_Status varchar(20)
+ }  y- n+ h# o2 q+ k- E  \但是,如果我尝试通过使用以下语句来更改现有列以应用默认值:
  h$ N/ h  y, [) D) ^$ h2 ]ALTER TABLE tb_TableName
9 u# A& Q( a$ G9 n  j9 n/ PALTER COLUMN Record_Status VARCHAR(20) NOT NULL DEFAULT ''
9 t0 M- o  v6 s+ ^; r/ |0 o8 E或者2 X9 L. e. U8 N% ]
ALTER TABLE tb_TableName 8 B3 l$ p# [! \) ?4 G) l
ALTER Record_Status VARCHAR(20) NOT NULL DEFAULT ''
1 z- Q" M/ r7 z我有一个错误:
- z6 ]$ h. w8 J2 w% ?
. P4 ?# f( j% d  g‘Record_Status’附近的语法不正确。
! M/ G# `  C  v& f/ z- K( b

0 O$ m; d- F/ W6 Q8 M! P                9 n7 K1 o! Q+ g' ^+ V$ y( Z
解决方案:/ X" P' N4 Z4 o, m
               
# C  b; b! }& |( Z0 i# B5 b
1 H7 H* n2 b9 r$ c3 s. o
. r0 J. Y) X% S$ _: N% ]( J                我想你想要这样的语法:
( P) ^. q4 c7 A- w; J" OALTER TABLE tb_TableName  7 Y. X0 M) z$ P) }
add constraint cnt_Record_Status Default '' for Record_Status
% f- W" k8 M! Z( O$ U, H1 `根据您的一些评论,我猜测null您的表中可能已经有值,这导致列的更改not
6 \2 e9 K, b5 T' Dnull失败。如果真是这样,那么您应该先运行UPDATE。您的脚本将是:
' Q7 R% a& g% }( J. `update tb_TableName+ y. {# \' v& R1 u4 y
set Record_Status  = ''0 y9 ^) R' a5 [
where Record_Status is null
0 R$ j3 _: q* eALTER TABLE tb_TableName
  r7 m& B7 ]' s: P# a3 bALTER COLUMN Record_Status VARCHAR(20) NOT NULL5 h3 L& _$ ~( d0 |) m+ t
ALTER TABLE tb_TableName
. _% a) b" j) |9 g- C- Z% DADD CONSTRAINT DEF_Name DEFAULT '' FOR Record_Status
/ i! J2 e- f6 d2 j参见带有演示的SQL Fiddle
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则