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

Sql server 如何将SSMS的表设计器中的Allow Nulls属性设置为始终为false?,sql-server,ssms,Sql Server,Ssms,在SQL Server Management Studio中,通过表设计器创建新表或向现有表添加列时,会显示3列: 列名 数据类型 允许空值 允许空值始终默认为True(勾选),但是,我想知道是否可以将SSMS配置为始终默认为False(未勾选) 在较小程度上,我还想知道是否可以在下方窗格的“列属性”选项卡中配置可编辑的默认选项。老实说,我不太确定“允许为空”的默认值是否可配置。我想不是。事实上,我希望它不会是可配置的,因为它有时可能会令人困惑。这是我的理由 在我看来,将Allow Nulls默

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

  • 列名
  • 数据类型
  • 允许空值
  • 允许空值始终默认为
    True
    (勾选),但是,我想知道是否可以将SSMS配置为始终默认为
    False
    (未勾选)


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

    老实说,我不太确定“允许为空”的默认值是否可配置。我想不是。事实上,我希望它不会是可配置的,因为它有时可能会令人困惑。这是我的理由

    在我看来,将Allow Nulls默认为
    True
    似乎与将DDL语句的列声明中不存在
    NULL
    /
    NOT NULL
    默认为
    NULL
    是一致的。也就是说,无论是在使用
    createtable
    语句时省略了该列定义,还是在使用诸如SSMS之类的工具的对话模式时不注意它,我都希望得到相同的结果

    由于
    NULL
    notnull
    的缺失已经被很多人解释为
    NULL
    ,我认为现在改变这一含义没有多大意义。因此,新表对话框中allownulls选项的默认值也不应更改


    不过,有意义的是,在对话框中设置一个默认的新列来拒绝Null开关(当然,最初是关闭的),以更改此表编辑特定会话中的默认行为。

    我认为这是不可配置的,因为SSMS在您尝试在编辑表模式下关闭它时会引发一些问题(假设它们使用相同的底层代码库)

    但是,您可以通过使用来实现所需的功能。这将覆盖(会话)新列的默认可空性

    请注意sp_帮助中的“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。

    如果您对操作注册表项没有问题,这里有一个选项可以强制SSM始终将值false分配给Allow NULL属性

    注意:更改注册表项时请小心。
  • 在Windows开始-->运行命令中键入regedit以打开注册表编辑器

  • 导航到
    HKEY\U CURRENT\u USER\Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\DataProject
    您可能需要相应地更改SQL Server版本。我使用的是SQL Server 2008 R2 Express,因此是版本100

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

  • 右键单击该键并选择修改选项。将值从1更改为0。默认值为1,表示真

  • 如果您已经在运行SQL Server Management Studio,请重新启动它。感谢您指出此步骤


  • 希望这能有所帮助。

    我建议远离表设计器。使用适当的DDL更容易编写脚本、复制、存储在源代码管理中,还可以避免可视化设计器中的许多未解决的错误或怪癖。我查看了SSMS注册表和SSMS目录中的各种xml文件,但找不到任何内容。+1-这是一个反射使用脚本创建表时所经历的正常行为的一种改变-如果您不指定任何内容,
    NULL
    是允许的。@Andrey M-感谢您亲自关注/评论此问题和答案。@Barry Kaye:一点也不,我对可能出现的混乱(然后)表达了我的担忧潜在的切换可能会导致这种情况,所以我只需要遵循这个线程,并对其他人的发现同样诚实。有趣的是,我不知道有这样的设置!我想知道当你调用表设计窗格时,SSMS是否会读到它。我想如果有办法将此命令注入SSMS用于表e的会话中,人们会发现这一点编辑,就在打开“表设计”窗格之前。这是我最初的想法,表创建屏幕似乎没有响应此设置中的更改。我的意思是这样写的,我的错。该屏幕可能正在使用自己的会话,因此,如果您尝试在查询窗口中更改设置,然后调用“新建表”命令,我认为这是错误的我很好,你看不到效果。@Jeremy Gray-谢谢-当然是一个有趣的方法/尝试。Re:你的假设-没有阴谋-我只是发现我的大多数数据库列都不是空的,我认为不必取消勾选复选框会稍微容易一些!做得好!我必须看c如果我现在决定使用交互模式创建表,请务必小心。:)可能的步骤#5:如果在更改属性时SSMS正在运行,则需要重新启动它,新设置才能生效。@Siva-谢谢-很好的发现。我相信每个关注这个问题的人都已经注意到还有很多其他有趣的配置。我可以添加一个后续问题吗。。。。我想将description属性添加到新的表设计器。。。。。你能帮我指出正确的方向吗?我将发布另一个问题,以便大家也能看到。谢谢