在SQL Server - Java中更改列的数据类型时保留非null

时间:2014-05-01 14:50:57

标签: java sql sql-server nullable notnull

我需要将数据类型为char(255)的数据库中所有列的数据类型更改为nvarchar(255)。为此,我需要删除P / F键,然后再次重新创建它们。但是在数据类型更改时,我没有丢失空信息。

某些列可能是可空的,有些则不是。这就是问题所在。

我该如何解决?

修改

当我丢弃P / F键时,我尝试成功更改数据类型。然后,当重新创建密钥时,它表示无法在该字段上设置密钥,因为它可以为空。

然后我尝试用try / catch:

来做

尝试添加密钥,如果没有,请更改非null的数据类型,然后再次尝试添加密钥。

它有效,但现在抛出了一些异常。我认为工作已经完成,但我不确定,因为我的数据库有大约100个表,如果没问题就无法检查所有表。

这是其他方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用INFORMATION_SCHEMA.COLUMNS视图查找char(255)的所有列。该视图还包含有关该列的其他信息,例如它属于哪个表以及它是否允许为空。

例如......

select TABLE_NAME, COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
from INFORMATION_SCHEMA.COLUMNS
Where DATA_TYPE = 'char'
And CHARACTER_MAXIMUM_LENGTH = 255

您可以使用该信息来确定需要修改哪些列,并且您知道它是否允许为空。