如何在SSMS的表设计器中将Allow Nulls属性设置为始终为false?

时间:2012-04-15 21:15:58

标签: sql-server ssms

在SQL Server Management Studio中创建新表或通过表设计器向现有表添加列时,会显示3列:

  1. 列名
  2. 数据类型
  3. 允许空缺
  4. 允许Null始终默认为True(勾选),但是,我想知道是否可以将SSMS配置为始终将其默认为False(未选中)?

    在较小程度上,我也有兴趣知道是否可以在下方窗格的“列属性”选项卡中配置可编辑的默认选项。

3 个答案:

答案 0 :(得分:3)

老实说,我不确定 Allow Nulls 的默认值是否可配置。我希望不是。事实上,我希望它不可配置,因为它可能在某些时候令人困惑。这是我的推理。

默认允许Nulls True似乎与我在{NULL / NOT NULL的DDL语句的列声明中缺少NULL / CREATE TABLE一致NULL 1}}。也就是说,在使用NOT NULL语句时我是否省略了该列的定义,或者在使用某些工具(如SSMS)的对话模式时我没有注意它,我希望结果是相同的。

由于NULL或{{1}}的缺席已经被很多人解释为{{1}}已经有一段时间了,我认为改变这个含义并不是很有意义现在。因此,新表格对话框中允许空值选项的默认值也不应更改。

可能有意义的是,默认新列Deny Null 开关(当然最初关闭),在对话框中更改默认行为在这个特定的表编辑会话中。

答案 1 :(得分:3)

我认为它不可配置,只是因为当您尝试在编辑表模式下关闭它时SSMS抛出(假设它们使用相同的底层代码库)。

但是,您可以使用SET ANSI_NULL_DFLT_ON实现所需目标。这将覆盖新列的默认可为空性(对于会话)。

请注意sp_help中“Nullable”列与下面的查询之间的差异。

set ANSI_NULL_DFLT_ON ON
create table test (id int)
go
sp_help test
go
set ANSI_NULL_DFLT_ON OFF

drop table test
create table test (id int)
go
sp_help test

我假设您要执行此操作以强制您自己或与您合作的人将其列默认为NOT NULL而不是NULL。

答案 2 :(得分:3)

如果您可以操作注册表项,则可以选择强制SSMS始终将值 false 分配给 Allow Null 属性。

NOTE: Please be careful while altering registry keys.

  1. Windows开始中输入 regedit - > 运行命令以打开注册表编辑器。

  2. 导航到 HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\DataProject 您可能需要相应地更改SQL Server版本。我正在使用 SQL Server 2008 R2 Express ,因此版本 100

  3. 在上述注册表路径下,查找键名 SSVDefaultAllowNull

  4. 右键单击该键,然后选择修改选项。将值从 1 更改为 0 。默认值为 1 ,表示 True

  5. 如果您已在运行 SQL Server Management Studio ,请重新启动它。感谢@Andriy M指出了这一步。

  6. 希望有所帮助。