创建表并在两个步骤中给出默认值是否有用?首先使用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
为什么或为什么我不应该继续创建像这样的新表:
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]
答案 0 :(得分: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)
)
因为如果您需要处理约束(禁用或删除它),除非您明确地将其命名,否则它将具有一个很好的,非常反直觉的系统提供的名称,这通常会导致头痛和麻烦。 名称您的约束!
答案 1 :(得分:0)
我更喜欢在创建脚本中一次完成所有操作。我假设在最初创建表之后添加了更改。脚本保持独立,因此可以根据需要更新所有环境。
答案 2 :(得分:0)
SQL Server管理工作室似乎以这种方式生成表创建更改脚本,也许这就是为什么它们采用这种格式:
CREATE TABLE dbo.Table_1
(
Id int NOT NULL,
Name nvarchar(50) NOT NULL,
Surname nvarchar(50) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT
DF_Table_1_Name DEFAULT N'Foo' FOR Name
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT
DF_Table_1_Surname DEFAULT N'bar' FOR Surname
GO
ALTER TABLE dbo.Table_1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT