当前位置: 首页 > news >正文

【sqlserver】修改nvarchar类型为varchar脚本

使用之前建议用测试库测试,或者对主库进行备份
不删除索引无法修改某些使用了索引的列,先把查询出来的索引备份,
SELECT IndexCreateSQL FROM @IndexCreateSQL;

USE xxx_database;
GO-- 声明变量
DECLARE @sql NVARCHAR(MAX) = N'';
DECLARE @alter_sql NVARCHAR(MAX);
DECLARE @IndexDropSQL TABLE (IndexDropSQL NVARCHAR(MAX));
DECLARE @IndexCreateSQL TABLE (IndexCreateSQL NVARCHAR(MAX));
DECLARE @AlterSQL TABLE (AlterSQL NVARCHAR(MAX));-- 查找所有表的 nvarchar 类型字段,排除主键字段、唯一约束字段和系统表
INSERT INTO @AlterSQL (AlterSQL)
SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ALTER COLUMN ' + QUOTENAME(COLUMN_NAME) + CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 THEN ' TEXT'ELSE ' VARCHAR(' + CAST(CHARACTER_MAXIMUM_LENGTH * 2 AS NVARCHAR(10)) + ')'END + ';'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'nvarchar' AND CHARACTER_MAXIMUM_LENGTH IS NOT NULLAND COLUMN_NAME NOT IN (-- 排除主键字段SELECT c.name FROM sys.tables tINNER JOIN sys.indexes i ON t.object_id = i.object_idINNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_idINNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_idWHERE i.is_primary_key = 1)AND COLUMN_NAME NOT IN (-- 排除唯一约束字段SELECT c.name FROM sys.tables tINNER JOIN sys.indexes i ON t.object_id = i.object_idINNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_idINNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_idWHERE i.is_unique = 1 OR i.is_unique_constraint = 1)AND TABLE_SCHEMA != 'sys' -- 排除系统表AND COLUMN_NAME not in('PatientId','Founder','PatientNo','Modifier','GroupId');-- 查找每个表的所有非主键、非唯一约束索引并生成删除和重新创建的SQL语句
INSERT INTO @IndexDropSQL (IndexDropSQL)
SELECT'DROP INDEX ' + QUOTENAME(i.name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(i.object_id)) + '.' + QUOTENAME(OBJECT_NAME(i.object_id)) + ';'
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE i.is_primary_key = 0 -- 排除主键索引AND i.is_unique = 0 -- 排除唯一索引AND i.is_unique_constraint = 0 -- 排除唯一约束AND OBJECT_SCHEMA_NAME(i.object_id) != 'sys'; -- 排除系统表INSERT INTO @IndexCreateSQL (IndexCreateSQL)
SELECT'CREATE INDEX ' + QUOTENAME(i.name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(i.object_id)) + '.' + QUOTENAME(OBJECT_NAME(i.object_id)) + '(' + STUFF((SELECT ', ' + QUOTENAME(c.name)FROM sys.index_columns ic2INNER JOIN sys.columns c2 ON ic2.object_id = c2.object_id AND ic2.column_id = c2.column_idWHERE ic2.object_id = i.object_id AND ic2.index_id = i.index_idORDER BY ic2.index_column_idFOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ');'
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE i.is_primary_key = 0 -- 排除主键索引AND i.is_unique = 0 -- 排除唯一索引AND i.is_unique_constraint = 0 -- 排除唯一约束AND OBJECT_SCHEMA_NAME(i.object_id) != 'sys'; -- 排除系统表-- 输出删除索引的SQL语句
SELECT  IndexDropSQL FROM @IndexDropSQL;-- 输出创建索引的SQL语句
SELECT  IndexCreateSQL FROM @IndexCreateSQL;--输出修改列的SQL语句
SELECT AlterSQL  FROM @AlterSQL;-- 执行修改列的SQL语句
WHILE EXISTS (SELECT 1 FROM @AlterSQL)
BEGINSELECT TOP 1 @alter_sql = AlterSQL FROM @AlterSQL;PRINT '执行修改列的SQL语句:' + @alter_sql;EXEC(@alter_sql);DELETE TOP (1) FROM @AlterSQL;
END

文章转载自:

http://BkeyL6CY.rfwqt.cn
http://OAN4twrz.rfwqt.cn
http://8VbhFrj4.rfwqt.cn
http://FZfin27O.rfwqt.cn
http://HrHMJQkh.rfwqt.cn
http://0hoRb3aG.rfwqt.cn
http://eiwkgicz.rfwqt.cn
http://GWtPmZFO.rfwqt.cn
http://LuCJA81R.rfwqt.cn
http://qgUjQ2TF.rfwqt.cn
http://WsJbXWFI.rfwqt.cn
http://F0QF0BJT.rfwqt.cn
http://myGC7dkT.rfwqt.cn
http://EJa3PGyV.rfwqt.cn
http://3mKHfaNl.rfwqt.cn
http://yyXf5oTg.rfwqt.cn
http://r65EWAWn.rfwqt.cn
http://NHm1P8MP.rfwqt.cn
http://S169Yhhx.rfwqt.cn
http://VP3Vhvht.rfwqt.cn
http://pfAkNa0q.rfwqt.cn
http://jQZrMxkg.rfwqt.cn
http://Ctbf9en5.rfwqt.cn
http://bcInMAn2.rfwqt.cn
http://4idontTF.rfwqt.cn
http://1jRTpPnC.rfwqt.cn
http://S9yxiqBr.rfwqt.cn
http://S8Il0kFo.rfwqt.cn
http://uAqDDWtL.rfwqt.cn
http://ufNPdHas.rfwqt.cn
http://www.dtcms.com/a/136656.html

相关文章:

  • 神经光子渲染:物理级真实感图像生成——从麦克斯韦方程到深度学习
  • C# 西门子通信
  • 敦普水性低温烤漆的进击
  • NO.94十六届蓝桥杯备战|图论基础-单源最短路|常规dijkstra|堆优化dijkstra|bellman-ford|spfa(C++)
  • JavaSE学习(前端初体验)
  • 界面控件DevExpress WPF v25.1新功能预览 - 文档处理类功能升级
  • Linux 软件管理
  • 简单实现单点登录
  • rust编程学习(二):复合数据类型
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——板载蓝牙测试 #RTL8733BU
  • 计算方法在单细胞数据分析中的应用及AI拓展
  • Flutter项目之设置页
  • 基于PyTorch实现的Diffusion模型:从MNIST图像中学习生成能力
  • MyBatis 如何使用
  • Navicat导入JSON数据到MySQL表
  • 安卓环境搭建开发工具下载Gradle下载
  • git在分支上会退到某个指定的commit
  • 在边缘端进行tensorflow模型的部署(小白初探)
  • 今日算法题
  • 安装 MySQL8.0.17
  • Selenium2+Python自动化:利用JS解决click失效问题
  • GitHub开源项目esp32小智AI语音代码详解
  • 【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
  • 力扣 双指针算法(一)
  • 每日一题-力扣-2537. 统计好子数组的数目 0416
  • Java高频面试之并发编程-03
  • Qt QML实现Windows桌面颜色提取器
  • JVM:类加载子系统
  • android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化
  • 基于多模态深度学习的亚急性脊髓联合变性全流程预测与个性化管理技术方案