SQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型

Posted

技术标签:

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

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

【问题讨论】:

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

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

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

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

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

【讨论】:

以上是关于SQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中易混淆的数据类型

CONVERT 函数从 SQL Server 到 REDSHIFT

来自cshtml中SQL Server查询的jquery UI自动完成列表

Sql Server快速建表

SQL-Server Varchar 的大小

SQL Server char,varchar,nchar,nvarchar区别