我知道这些详细信息都在信息模式上,但是我的表包含所有列以varchar(max)的形式,因为它们是直接从平面文件源写入的。我想根据列中的值检测列类型。我无法控制数据的输入方式,因此该表是我的来源。
因此,例如,如果Column1具有类似{1、2、100,'NA',NULL,'不可用','供应商未提供'}的值,则我当前的SQL语句将该列归类为varchar。我希望能够为该列动态分配一个INT。我们可以安全地假设传入的整数数将大于列中其他类型的字段。
答案 0 :(得分:0)
如果您的列包含“ NA”,“不可用”,“供应商未提供”之类的数据,则它不能是数字,则必须先清除数据,然后相应地更改数据类型
对于数字数据,您可以使用ISNUMERIC函数进行检查
https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql?view=sql-server-2017
您可以使用ISDATE函数查看日期数据
https://docs.microsoft.com/en-us/sql/t-sql/functions/isdate-transact-sql?view=sql-server-2017
答案 1 :(得分:0)
没有任何内置于Sql Server的内容。与其他数据库一样,Sql Server希望您对所有内容使用varchar(max)
以外的列类型。如果数据是平面文件,请在导入前 检查文件以了解您要导入的文件到底是什么,并将其设置为SSIS作业或其他导入过程的一部分。