作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有使用 varchar
的表、存储过程和函数,但为了支持阿拉伯语文本,我需要将它们更改为 nvarchar
。我有这个表格脚本
select cmd = 'alter table [' + c.table_schema + '].[' + c.table_name + '] alter column [' + c.column_name + '] nvarchar',* from information_schema.columns c where c.data_type='varchar' order by CHARACTER_MAXIMUM_LENGTH desc
使用这个我得到一个查询,我可以复制粘贴并执行以将 varchar 更改为 nvarchar 但它们默认不可为 null 的列包含 null,这是一个大问题。我需要将可为空的保留为可为空,将不可为空的保留为不可空。
接下来,问题是我必须手动编辑存储过程和函数以在需要时实现此更改。是否有一些解决方法脚本至少可以安全地更改参数?
请注意,数据库中没有 View ,一些 varchar
声明的大小也为 8000。
请给我一个安全的解决方案。
最佳答案
只需添加
+ CASE WHEN IS_NULLABLE='NO' THEN ' NOT NULL' ELSE '' END
此外,您需要将 CHARACTER_MAXIMUM_LENGTH
添加到 nvarchar
。
至于存储过程中的参数,我最好手动做。
已编辑
完整查询
SELECT cmd = 'alter table [' + c.table_schema + '].[' + c.table_name
+ '] alter column [' + c.column_name + '] nvarchar('
+CASE WHEN CHARACTER_MAXIMUM_LENGTH<=4000
THEN CAST(CHARACTER_MAXIMUM_LENGTH as varchar(10)) ELSE 'max' END+')'
+ CASE WHEN IS_NULLABLE='NO' THEN ' NOT NULL' ELSE '' END,*
FROM information_schema.columns c
WHERE c.data_type='varchar'
ORDER BY CHARACTER_MAXIMUM_LENGTH desc
关于sql - 如何在不默认为 null 的情况下将 db 对象数据类型从 varchar 更改为 nvarchar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691460/
我是一名优秀的程序员,十分优秀!