Eri*_*ndi 8 sql-server-2005 sql-server-2008 sql-server
我正在批量更新 SQL Server 数据库。我将所有numeric(38,0)列更改为int (是的,SQL Server 脚本是从 Oracle 脚本创建的)。使用 SMO 和 C# (我是一名软件工程师),我设法生成了非常好的脚本,就像SQL Server Management Studio那样。除了一个特定问题外,一切都非常好:
对于少数表格,当我调用ALTER TABLE [myTable] ALTER COLUMN [columnA] INT它时,它决定还将列从NOT NULL to NULL. 这当然是一个大问题,因为我需要为那些特定列上的大多数表重新生成主键。
显然,我有很多选择使用 SMO 来找出哪些列是主键,并在我更新数据类型之后或同时强制它们为 NOT NULL,但我真的很好奇是什么导致了这种情况。
gbn*_*gbn 10
这取决于您对SET ANSI_NULL_DFLT_OFF或SET ANSI_NULL_DFLT_ON 的设置(也可以从 SET ANSI_DEFAULTS 中读取这些以了解其他效果)。
就个人而言,如果我想要 null 或非 null 列而不是依赖环境设置,我会明确指定此约束。
ALTER TABLE [myTable] ALTER COLUMN [columnA] INT NOT NULL
Run Code Online (Sandbox Code Playgroud)
您可以再次发出此命令,如果列已经处于所需的可空性,则该命令将被忽略。
但是,您还说您只需要在它是主键的一部分的地方更改它。这应该与建模/实现阶段的列是否可以为空无关
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |