SqlServer 通用修改字段类型(多表)

2023-10-27

起因:因为SqlServer 数据库不支持varchar 类型写入 韩文多语言 。

解决方式:修改varchar类型为 nvarchar 类型 ,nvarchar类型是占用两个字节,

其他问题:

1.SqlServer的主键最多900字节,所以不能将主键索引扩大,需要缩短主键长度。

2.text类型修改为ntext 需要先修改为nvarchar 才能 修改为ntext类型

sql 如下:


    
DECLARE @name nvarchar(100)
DECLARE @fieldName nvarchar(100)
DECLARE @fieldType nvarchar(100)
DECLARE @leng int
DECLARE @nums int 
set @nums=0
DECLARE CURSOR1 CURSOR SCROLL for (select name from sysobjects where xtype = 'u')    ---u 表 V 视图 P 函数
        OPEN CURSOR1
                

            fetch FIRST from CURSOR1 into @name
                    WHILE (@@FETCH_STATUS=0)
                    BEGIN

        DECLARE cursor2 CURSOR SCROLL for (
                 select syscolumns.name as fieldName ,systypes.name as fieldType,syscolumns.length as leng
           from syscolumns inner join systypes on systypes.xtype=syscolumns.xtype
             where id=(select id from sysobjects where  name=@name) and syscolumns.name like '%digest%'  --and  systypes.name ='nvarchar'
                            ) ---要查询的类型
                                    
                                        OPEN CURSOR2
                                            fetch FIRST from CURSOR2 into @fieldName,@fieldType,@leng
                                                    WHILE (@@FETCH_STATUS=0)
                                                    BEGIN
                                            BEGIN try
                                                    set  @nums=@nums+1
                                                    
                                                        --    BEGIN
                                                ----    EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar(100)')---更改类型
                                                --    EXECUTE('alter table '+@name+' alter column '+@fieldName+' ntext')    
                                                            print    (@NAME+'   '+@fieldName+'  '+@fieldType)
                                                            EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar('+@leng+')')    
                                                            set  @nums=@nums+1
                                                        --    END
                                            end try
                                                    BEGIN catch
                                                    print    (@NAME+'   '+@fieldName+'  '+@fieldType)
                                                        set  @nums=@nums+1
                                            fetch next from CURSOR2 into @fieldName,@fieldType,@leng
                                                    END catch
                                                        
                                                            
                                            fetch next from CURSOR2 into @fieldName,@fieldType,@leng
        
                                            end
                                    close CURSOR2  
                                    deallocate   CURSOR2    
                            
                                    
                    
        
            fetch next from CURSOR1 into @name
                
                    end
                    
            close CURSOR1  
            deallocate   CURSOR1    
    print @nums

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlServer 通用修改字段类型(多表) 的相关文章

  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 是否允许在流水线 PL/SQL 表函数中使用 SELECT?

    管道函数的文档指出 在 SQL 语句 通常是SELECT 并且在大多数示例中 管道函数用于数据生成或转换 接受客户作为参数 但不发出任何 DML 语句 现在 从技术上讲 可以使用 SELECT 而不会出现 Oracle 中的任何错误 ORA
  • SQL - 为每条记录调用存储过程

    我正在寻找一种方法来为 select 语句的每条记录调用存储过程 SELECT SomeIds SELECT spro Id FROM SomeTable as spro INNER JOIN Address addr ON addr Id
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • PHP DBlib PDO 问题

    我正在尝试通过 php 连接到 MSSQL 服务器 但我的 pdo 连接给我带来了困难和我不太理解的错误 我在下面粘贴的代码一周前运行得很好 突然间它就停止了 没有任何人进行任何更改 我仍然可以连接到服务器并直接从命令行运行查询 但我在 p
  • 为什么查询优化器完全忽略索引视图索引?

    SQL 小提琴 http sqlfiddle com 6 d4496 1 http sqlfiddle com 6 d4496 1 数据是为您的实验预先生成的 有一个明显的表格 CREATE TABLE Entity ID int Clas
  • 在 C# 中将平面数据库结果集转换为分层对象集合

    我有一个数据库查询 它以平面格式返回分层数据 例如客户 订单和订单项目 只是一个例子 我的数据不同 如何将其转换为分层对象集合 即客户对象的集合 其中每个客户对象都有订单对象的集合 每个订单对象都有订单项目对象的集合 这只是循环遍历每个项目
  • ORA-01749: 您不能向自己授予/撤销权限

    我正在运行以下查询RATOR MONITORING授予引用权限的架构RATOR MONITORING CONFIGURATION SMSC GATEWAY表到RATOR MONITORING schema GRANT REFERENCES
  • 更新每组单行

    的背景 我有一个临时表 其中包含唯一的 rowID OrderNumber 和 guestCount 等信息 RowID 和 OrderNumber 已存在于该表中 并且我正在运行一个新查询来填充每个 orderNumber 缺少的 gue
  • 当我输入 dateadd 或 datediff 代码时,我总是收到此错误“ORA-00904“DATEADD”无效标识符。”

    我有一个大学项目 并且有一个包含入院和出院日期属性的患者表 我需要删除超过 7 年的记录 我使用了以下代码 delete from patient where dis date gt datedadd yy 7 getdate 我收到错误
  • 如何在sqlite中添加特定数量的空行?

    我有一个SQLite文件 我想添加2550 empty NULL rows 我可以使用此代码添加一个空行 INSERT INTO my table DEFAULT VALUES 但我需要 2550 行 有什么捷径吗 我不想执行相同的代码 2
  • 自动创建n列表

    我想在一行中将 236 个 int 值存储到 sql 中 现在我必须声明该表 但我不想输入 236 倍的列名 列名应该是 BYTE001 BYTE002 或其他前缀 如 BYTE B INT 可以自动生成ColumnNames吗 我尝试以下
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • SQLite 条件 ORDER BY 中的 DESC

    我需要选择按以下逻辑排序的记录 但是当 DESC 处于条件中时 SQLite 会引发错误 ORDER BY CASE WHEN parentGUID IS NULL THEN datePosted DESC ELSE datePosted
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is

随机推荐

  • 创建一个简单的定时任务示例demo

    废话不说直接上代码 controller Controller EnableScheduling public class SchedulingUtil Autowired private ceshi ceshi private stati
  • 简单粗暴解决$emit第一次传值不成功问题

    兄弟页面间传值用 e m i t 发 送 emit发送 emit发送 on接收 但是如果是跳转页面 A页面发送数据跳转到B
  • Springboot + mybatis 调试Console控制台 打印SQL语句

    Springboot mybatis Console控制台 打印SQL语句 有的时候项目查不出数据或者数据出现错误 这时候需要看看SQL语句是否有错 于是就用下面的配置信息 打印SQL语句 如果使用的是application propert
  • Java几种文件复制的实现测评

    Java几种文件复制的测评 前言 Java复制文件的实现方式有很多种 IO模式下 1 FileInputSTream FileOutputStream 2 BufferedReader BufferedWriter 采用readLine方法
  • mysql数据库----时间和日期类型

    为了方便在数据库中存储日期和时间 MySQL提供了表示日期和时间的数据类型 分别是YEAR DATE TIME DATETIME和TIMESTAMP 表3 4列举了这些MySQL中日期和时间数据类型所对应的字节数 取值范围 日期格式以及零值
  • __declspec(dllexport)(转)

    declspec dllexport 转 转自 http hi baidu com jk cau blog item 43f7e6b3b3082da1d9335abe html 一 declspec dllexport 将一个函数声名为导出
  • XHbuilder 运行到 Ios APP 需要 ipa 签名,超详细的教程,你不看吃亏的是自己!

    今天使用 hbuilder 运行到 ios 真机的时候 突然发现还需要 ipa 签名 这是什么东东呢 1 IPA 签名是什么 因苹果公司禁止企业证书用于非企业内部开发者 所以开发者无法再使用DCloud的企业证书签名的标准运行基座 运行标准
  • ATM中英转换C语言源代码,Atm机中英转换去取款存款等C语言

    gt cardID cout lt gt psw cout lt 存款 取款 查询余额 修改密码 转账 退出 开户函数定义 cout lt cin gt gt money cout lt 存款函数定义 int money1 cout lt
  • Java synchronized的锁升级与对象头

    1 对象头存储加锁信息 1 如何查看对象头 通过依赖
  • Qt教程(3) : 信号与槽

    信号与槽是用于对象之间的通信的 这是 Qt 的核心 为此 Qt 引入了一些关键字 他们是slots signals emit 这些都不是 C 关键字 是 Qt 特有的 这些关键字会被 Qt 的 moc转换为标准的 C 语句 Qt 的部件类中
  • eclipse 导入项目源码报错(最全问题及解决方案)

    eclipse 导入项目源码报错问题汇总及解决方案 概述 情况一 no projects are found to import 报错原因 解决方法 情况二 导入项目后乱码 报错原因 解决方法 情况三 项目名称上出现红叉 报错原因 解决办法
  • pytorch计算GPU运行时间:

    tim 0 start torch cuda Event enable timing True the times end torch cuda Event enable timing True start record out net i
  • Android匿名共享内存和MemoryFile

    http blog csdn net goodlixueyong article details 53151959 今天要讲的内容相对冷门 日常开发中的使用率较低 但是 在某些场景下 它也许可以带给我们一个新的思路 帮我们解决一些棘手的问题
  • 【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

    博客主页 virobotics的CSDN博客 LabVIEW深度学习 人工智能博主 所属专栏 LabVIEW深度学习实战 上期文章 LabVIEW OpenCV快速搭建人脸识别系统 附源码 如觉得博主文章写的不错或对你有所帮助的话 还望大家
  • VS Code如何让右键运行代码[秒懂!!!]

    前言 当我们下载完了VSCode 运行代码的时候发现还要去左上角的工具栏上面运行 这里我将教给你如何用右键的菜单运行代码 正文 下载一个插件就可以解决这个问题 Code Runner这款插件能解决这个问题 如图是下载过程 下载完了就可以用右
  • 计算机视觉小实例 No.3 基于Hough变化的答题卡识别

    答题卡识别 答题卡自动阅卷系统通过获取答题卡图像作为系统输入 并通过计算机处理 自动识别填图标记 存入数据库完成阅卷 但是答题卡在运输和使用过程中 容易受到设备 环境等因素的影响 使得图像质量在一定程度上有所下降 影响了自动阅卷的准确率 甚
  • ChatGPT对话聊天

    工具说明 ChatGPT是人工智能技术驱动的自然语言处理工具 它能够通过理解和学习人类的语言来进行对话 还能根据聊天的上下文进行互动 站内地址 本站提供ChatGPT聊天工具 能满足日常使用 但由于对接国外接口 中间经过复杂中转实现 故稳定
  • 魔方机器人之下位机编程---------舵机控制

    1 春天180 舵机 SR 403P 信号线和控制线颜色对应关系 两黑一白 白色信号线 中间电源 另一黑色电源 以上MC9S12XS128单片机通道三产生的周期为20ms 高电平为1 5ms的舵机控制信号 void PWM Init voi
  • 如何查看端口被哪个进程占用(Windows/Linux)

    之前有写过Linux如何查看端口被占用 但是最近查看Window的端口占用情况比较多 两个系统均使用了netstat命令但是参数不同 所以新写一个笔记作为对比 Windos查看端口占用 netstat ano 这个命令可以显示本机所有端口占
  • SqlServer 通用修改字段类型(多表)

    起因 因为SqlServer 数据库不支持varchar 类型写入 韩文多语言 解决方式 修改varchar类型为 nvarchar 类型 nvarchar类型是占用两个字节 其他问题 1 SqlServer的主键最多900字节 所以不能将