我们有一个进程可以获取表列的列表和每个应该具有的大小(varchar类型),并修改它们以确保它具有已定义的大小。
在实际实现中,我们直接对列表中的每一列执行一个alter table ...
如果我们首先检查列大小是否与正确的大小不同,然后再执行alter table,它会运行得更快吗?
统计上有大约4000个表格要检查,20列最多需要更正......
答案 0 :(得分:2)
编辑:反映评论:
更快的速度取决于修改列的操作的成本以及表中需要更改的列数。例如,更改一列空值不是很费钱。但是如果你在表格中有很多数据和很多列,那么对新表格副本做一个表可能会更好。根据数据库的指标来决定这一点,并不总是有正确和错误的做法。
您可能会创建一些动态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元数据将始终是最新的。为了使您更容易创建元数据视图,使其易于使用。但这是一个不同的问题。
答案 1 :(得分:0)
最后,我们在alter table之前实现了检查,在执行alter命令的情况下执行alter命令的百分比很低