gpt4 book ai didi

sql - 如何在不默认为 null 的情况下将 db 对象数据类型从 varchar 更改为 nvarchar?

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:56 24 4
gpt4 key购买 nike

我有使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com