任何想法为什么运行alter column会导致列从“not null”变为“null”?

时间:2011-02-08 04:34:14

标签: sql-server sql-server-2005 tsql sql-server-2008

我正在大规模更新SQL Server数据库。我正在将所有numeric(38,0)列更改为int (是的,SQL Server脚本是从Oracle脚本创建的)

使用SMO和C#(我是一名工程师),我设法生成非常好的脚本,例如 SQL Server Management Studio

除了一个特定问题外,一切都很顺利:

对于少数几个表,我打电话

ALTER TABLE [myTable] ALTER COLUMN [columnA] INT

它还决定将列从 NOT NULL 更改为 NULL 。当然,这是一个很大的问题,因为我需要为这些特定列上的大多数表重新生成主键。

显然,我有很多选项使用SMO来找出哪些列是主键并在我更新数据类型之后或者在我更新数据类型时强制它们为NOT NULL,但我真的很好奇是什么原因造成这种情况。

此致

埃里克。

2 个答案:

答案 0 :(得分:4)

因为缺少NOT NULL,默认值为NULL。

ALTER TABLE [myTable] 
   ALTER COLUMN [columnA] INT NOT NULL

答案 1 :(得分:4)

来自ALTER TABLE (Transact-SQL)

  

使用时创建或更改表   CREATE TABLE或ALTER TABLE   语句,数据库和会话   设置影响和可能   覆盖数据的可空性   列中使用的类型   定义。我们建议你   总是明确地将列定义为   非计算的NULL或NOT NULL   列。