当前位置: 首页 > 面试题库 >

如何将一种数据类型的所有Sql列更改为另一种

辛渝
2023-03-14
问题内容

我有一个数据库(Sql Server2005),其中有数十个数据库tables,每个数据库都有许多columns(平均10-20),数据类型设置为nvarchar(max)。这绝对是致命的性能(其中一些列用于其中joins,某些表具有100K+行)。我想将所有这些列更改为varchar(250)。自动执行此操作的最佳方法是什么?(我可以使用Management Studio,也可以创建一个实用程序来通过可ASP.net访问db的网站执行此操作,以较容易的为准)。


问题答案:

这是一个工作脚本,用于INFORMATION_SCHEMA.COLUMNS查找所有*varchar(max)列并将其转换为varchar(255)

declare @schema nvarchar(255)
declare @table nvarchar(255)
declare @col nvarchar(255)
declare @dtype nvarchar(255)
declare @sql nvarchar(max)

declare maxcols cursor for
select
    c.TABLE_SCHEMA,
    c.TABLE_NAME,
    c.COLUMN_NAME,
    c.DATA_TYPE
from
INFORMATION_SCHEMA.COLUMNS c
inner join INFORMATION_SCHEMA.TABLES t on
    c.TABLE_CATALOG = t.TABLE_CATALOG
    and c.TABLE_SCHEMA = t.TABLE_SCHEMA
    and c.TABLE_NAME = t.TABLE_NAME
    and t.TABLE_TYPE = 'BASE TABLE'
where
    c.DATA_TYPE like '%varchar'
    and c.CHARACTER_MAXIMUM_LENGTH = -1

open maxcols

fetch next from maxcols into @schema, @table, @col, @dtype

while @@FETCH_STATUS = 0
begin
    set @sql = 'alter table [' + @schema + '].[' + @table + 
        '] alter column [' + @col + '] ' + @dtype + '(255)'
    exec sp_executesql @sql

    fetch next from maxcols into @schema, @table, @col, @dtype
end

close maxcols
deallocate maxcols

这是我曾经宽恕过的唯一游标,但这是一个很好的选择。本质上,它找到所有*varchar(max),构建alter语句,然后使用执行sp_executesql

享受!



 类似资料:
  • 问题内容: 我正在尝试使用Go语言,并且对它很陌生。我已经成功地完成了教程,现在正在编写一个小程序来评估其通常执行的操作类型的性能。我有一个很长的float32类型切片,需要将其尽可能有效地转换为float64类型的切片。除了遍历slice的元素并通过output [i] = float64(data [i])显式转换单个元素的类型外,还有没有一种方法可以用来转换整个slice而无需迭代?我曾尝试

  • 问题内容: 我想对Java变量进行动态转换,转换类型存储在其他变量中。 这是常规转换: 这就是我要的: 这有可能吗?谢谢! 更新资料 我正在尝试使用HashMap收到的A 填充类。 这是构造函数: 这里的问题是某些类的变量的类型是,如果接收到数字3,它会认为它是类型问题。 问题答案: 是的,可以使用反射 但这没有多大意义,因为必须将结果对象保存在类型变量中。如果你需要变量属于给定的类,则可以将其强

  • 问题内容: 从源(s,s,s)读取图像的最便捷方法是: 但是,然后, 如何转换为格式? 问题答案: 您可以创建所需类型的新BufferedImage,然后在其上绘制原始图像,如下所示:

  • 问题内容: 在pgsql中,有一种方法可以建立一个包含多个值的表,然后选择其中一个值(例如other_id),找出其最大值,并使表中的每个新条目都从该值开始递增。 我想这太容易了,没有机会工作。 非常感谢您的见解! 问题答案: 快速浏览一下文档会告诉您 数据类型smallserial, serial 和bigserial 不是真实类型, 而只是创建唯一标识符列的符号方便 如果你想使现有的(整数)列

  • 我正在尝试更改JTable中具有特定值的单元格,以更改为另一个值。但是,原始值是Double数据类型,我想更改为String数据类型。我写了下面的代码来更改文本,但我不知道为什么所有的值都不能匹配if语句条件。 这就是我的数据存储在文本文件中的方式:Name,N/a,-1.0 我想把-1.0改为N/A。这是我的代码:

  • 问题内容: 我有一个与MySQL数据库的Java程序连接,如何在同一连接上将当前数据库更改为另一个数据库? 我这样连接到MySQL: 经过一些操作后,我想在同一连接上连接到另一个mysql数据库。我怎样才能做到这一点? 我尝试使用: 但这不会更改要使用的数据库。 问题答案: 如MySQL文档中所述,您需要用于切换到另一个数据库。这也明确地说,你应该 不 执行切换。 发出此警告的原因是JDBC是数据