我们有一个获取表列列表和每个列应该具有的大小(varchar类型)的进程,并对它们进行修改,以确保它具有定义的大小。
在实际实现中,我们直接对列表中的每个列执行alter table ...
如果我们先检查列大小是否与正确的大小不同,然后再执行alter table,会不会运行得更快?
据统计,有4000左右的表列需要检查,最多有20列需要更正……
发布于 2012-07-05 18:16:05
最后,我们在alter table之前实现了检查,在需要执行alter命令的情况下,处理速度明显更快
发布于 2012-07-05 16:18:05
编辑:反映注释:
哪个更快取决于修改列的操作的成本,以及表中需要更改的列的数量。例如,更改一列空值的开销不是很大。但是,如果您有大量的数据和表中的许多列,那么从一个表复制到新表可能会更好。根据数据库的指标来决定这一点,并且并不总是有对错的anseer。
您可以创建一些动态sql来创建sql,以改变大小不正确的列的长度。这一定是最快的方法。
类似于:
SELECT
'some decision logic...' -- substitute values as needed
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
ISNULL(CHARACTER_MAXIMUM_LENGTH, 5) <> 5
AND DATA_TYPE = 'NVARCHAR'您还可以添加要考虑的指标,如表大小、数据大小、列数(分组依据)等。
Sql Server已经存储了所有这些元数据,您只需查询它即可。在定制表中复制此信息并在其上运行游标似乎是错误的。我想您提到的问题是,复制此信息可能会导致过时的数据,而sql server元数据将始终是最新的。为了使其更容易,您可以在元数据上创建视图,以使其易于使用。但这是一个不同的问题。
https://stackoverflow.com/questions/11340280
复制相似问题