使用 SQL Server 2014 Enterprise 的目的是导入一个 1GB 的 CSV 文件。数据被批量加载到数据库表中,其中大多数字段预定义为 varchar(64)。然后创建聚集列存储索引。对于数据的性质,这是有道理的,因为同一列中的值会定期重复。然后尝试将字段更改为浮动。
例如:
ALTER TABLE [dat].[HG_folder_3_2598]
ALTER COLUMN TOT_AU_MET_R float NOT NULL
正如人们可能(或可能不会)期望的那样,创建聚集列存储索引会加快这一进程。想法是可以处理执行此语句的代码中的任何错误(通过仔细的错误处理)并确定列中的任何数据是否无法升级。
然而一个人经常得到
错误 601:由于 SQL Server 数据移动,无法使用 NOLOCK 继续扫描。
这会导致 SQL Server Management Studio 查询窗口以及使用 ADO.net 的 c# 代码。只要重新执行前面提到的 alter table 语句,只要列中的数据是数字,查询就会成功地改变列。
问题是其他人是否注意到了类似的行为,以及他们是否对这种行为有更多的了解。特别是这个问题在最新版本的 SQL-server 中消失了吗?