我假装自己是DBA,因为我们公司没有 - 我们的服务器最初设置了不同的排序规则类型,原始的T-SQL开发人员编写了一个游标,它将循环遍历所有表{{ 1}}列并标准化整理...由于它们的方法,这最终将这些列的大小增加到最大值,因为它没有控制来检查已经更新过的表。
我们迫切需要能够正确地索引和调整这些表格上的表现,因为我们的分析实际上需要完成HOURS - 这当然会成为字段上的问题,这些字段都设置为varchar/nvarchar
的某些变体
今晚我正在与我们的网络/ IT工作人员一起重建有问题的服务器上的MASTER DB。我已经编写了以下代码来在最终重新整理后调整列的大小。如果我忽略了任何事情,请评估并给我一些反馈意见,并最终让我自己头疼错误(我们当然会首先完全备份所有内容)。
我们不必显着地将服务器和数据库保持在线,并且可以承担一定的停机时间来完成。
varchar/nvarchar (max/4000/8000)
主要编辑: 上面的代码是解决我的问题的良好开端:但是 - 确定sys.columns中的最大数据长度并非100%准确。为了证明这一点,运行前两个游标,如图所示
SELECT * FROM #tmp_Table_Column_Types ORDER BY Column_Length
您会看到一些列长度列为0(可能还有几个小于10个字符,您可能会非常怀疑)。
如果您对指定的表执行选择查询并按len(字段)排序,您将看到假定的0长度列中确实存在IS数据。
我还没有找到优雅的解决方案,但我使用子查询来对列数据进行实际调查并返回长度。