为什么我要使用两个步骤创建表?

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)

mar*_*c_s 8

您绝对可以使用"内联"样式来创建表的默认约束.我实际上更喜欢它,因为在我看来,它更清楚哪些位属于一起 - 但与此同时,表定义变得更加复杂.

我总是建议命名你的约束!

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)

因为如果你需要处理一个约束(禁用或删除它),除非你明确地命名它,它将有一个很好的,非常反直觉的系统提供的名称,这通常会导致头痛和麻烦.命名你的约束!