我正在大规模更新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,但我真的很好奇这可能是什么原因。
您也可以通过T / SQL查找列是否是主键的成员。不需要SMO。
—
mrdenny