dav*_*ave 1 database sql-server rdbms
创建表并在两个步骤中给出默认值有什么用处吗?首先使用CREATE TABLE,然后使用每个列的ALTER TABLE.这只是格式化首选项的问题?或者是否有更多技术原因可以做到这一点?
我在我的地方定义了一些创建表脚本,如下所示:
CREATE TABLE [dbo].[TABLE_EXISTING](
[SYS_ID] [varchar](17) NULL,
[TYPE] [varchar](35) NULL,
[CODE] [varchar](12) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TMG_ITS_PROF_INST_REC_T] ADD DEFAULT (space((17))) FOR [SYS_ID]
GO
ALTER TABLE [dbo].[TMG_ITS_PROF_INST_REC_T] ADD DEFAULT (space((35))) FOR [TYPE]
GO
ALTER TABLE [dbo].[TMG_ITS_PROF_INST_REC_T] ADD DEFAULT (space((12))) FOR [CODE]
GO
Run Code Online (Sandbox Code Playgroud)
为什么或为什么我不应该继续创建像这样的新表:
CREATE TABLE [dbo].[TABLE_NEW](
[SYS_ID] [varchar](17) NULL DEFAULT space(17),
[TYPE] [varchar](35) NULL DEFAULT space(35),
[CODE] [varchar](12) NULL DEFAULT space(12)
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
您绝对可以使用"内联"样式来创建表的默认约束.我实际上更喜欢它,因为在我看来,它更清楚哪些位属于一起 - 但与此同时,表定义变得更加复杂.
但我总是建议命名你的约束!
CREATE TABLE [dbo].[TABLE_NEW]
(
[SYS_ID] [VARCHAR](17) NULL
CONSTRAINT DF_TableNew_SysId DEFAULT space(17),
[TYPE] [VARCHAR](35) NULL
CONSTRAINT DF_TableNew_Type DEFAULT space(35),
[CODE] [VARCHAR](12) NULL
CONSTRAINT DF_TableNew_Code DEFAULT space(12)
)
Run Code Online (Sandbox Code Playgroud)
因为如果你需要处理一个约束(禁用或删除它),除非你明确地命名它,它将有一个很好的,非常反直觉的系统提供的名称,这通常会导致头痛和麻烦.命名你的约束!