我使用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,这是一个大问题。我需要将nullable保留为可空,不可为空为nullable。
接下来,问题是我必须手动编辑存储过程和函数,以便在需要时实现此更改。是否有一些解决方法脚本可以安全地更改参数?
请注意,数据库中没有视图,而且某些varchar
声明的大小也是8000。
请给我一个安全的解决方案。
答案 0 :(得分:4)
添加
+ 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