【问题标题】:SQL Server auto determine data type from VARCHAR(MAX) columnSQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型
【发布时间】:2020-08-25 14:28:11
【问题描述】:

我有一个包含很多表和很多列的数据库。大多数列的数据类型为VARCHAR(MAX)。有没有办法让我扫描数据并据此确定哪种数据类型更适合每一列?也许是一个 C# 库?任何其他在这方面做得更好的语言也可以。

【问题讨论】:

  • @KenWhite,我认为 Paul 理解 varchar(MAX) 不适用于许多列,并且正在寻找一种工具来帮助根据现有值确定每列的最合适类型。
  • 您应该知道列的逻辑含义。这决定了适当的数据类型,而不是当前值。
  • 由于这个问题被否决了,加我的 2 美分。对于已有十年或两年历史的遗留代码,列的意图及其实际用途可能不一致。分析可能有助于更好地理解当前状态(它补充但不能取代对领域的理解)。
  • 没有什么开箱即用...您可以使用CHARINDEX()PATINDEX() 来搜索字符和模式的存在。您可以使用TRY_CAST()TRY_CONVERT()TRY_PARSE() 来检查某些数据类型。您可以导出到 Excel 并检查导出工具如何使用隐式算法来查找适当的数据类型......并注意文化差异(十进制格式、日期/时间格式等)

标签: c# sql-server tsql sqldatatypes


【解决方案1】:

假设这是一个临时的一次性分析。

过去,我使用 sql 数据转储离线进行此类调查(在 SSMS 中加载转储)。如果您在非高峰时间收集转储,它不会影响生产流量。您可以选择使用简单的selectDATALENGTH(请参阅here)来查找平均大小,或者如果列已编入索引或具有统计信息(请参阅here),则使用DBCC SHOW_STATISTICS 命令

同样的步骤也可用于实时分析。不用说你必须小心。

您也可以将它们封装在来自应用层的ExecuteQueryExecuteNonQuery 命令中。鉴于我们假设这是一个临时的一次性分析,可能不值得这么麻烦。

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多