【问题标题】:Preserving not null when changing datatype of column in SQL Server - Java在 SQL Server 中更改列的数据类型时保持不为空 - Java
【发布时间】:2014-06-18 01:49:33
【问题描述】:

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

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

我该如何解决?

编辑:

当我删除 P/F 键时,我尝试成功更改数据类型。然后,在重新创建键时,它说不能在该字段上设置键,因为它可以为空。

然后我尝试用 try/catch 来做:

尝试添加键,如果没有,将数据类型更改为不为空,然后再次尝试添加键。

它可以工作,但现在会引发大量异常。我认为这项工作已经完成,但我不确定,因为我的数据库有大约 100 个表,如果它们都正常,则无法检查所有表。

那么这里还有其他方法吗?

【问题讨论】:

  • 谷歌和肘部油脂?也许你应该从你尝试过的开始。
  • 您在哪里丢失了非空信息?您的主键列现在不可能为空。您的外键可能是可空的,但如果是,您在丢失非空信息方面没有问题。那么.. 究竟是哪里出了问题?
  • 已编辑。我用谷歌搜索但没有成功。

标签: java sql sql-server nullable notnull


【解决方案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

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

【讨论】:

  • 我通过更努力的方式搜索了 char 列。谢谢。
猜你喜欢
  • 2014-06-15
  • 2016-10-22
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多