sql – NULL是否有数据类型?
|
我今天遇到了与此类似的代码. SELECT AuditDomain,ObjectId,AuditSubdomain = CONVERT(VARCHAR(50),NULL),SubDomainObjectId = CONVERT(INT,NULL) FROM Audit 这似乎意味着数据类型信息可以与NULL值相关联.这是否将元数据附加到NULL值,将其标识为指定的数据类型? This post详细介绍了在Sql Server中查找数据类型的方法,但是当我尝试以下行时,它返回为NULL: SELECT CAST(SQL_VARIANT_PROPERTY(CONVERT(INT,'BaseType') AS VARCHAR(20)) 解决方法在SQL Server中,在我能想到的所有场景中,NULL默认为INT.您可以使用以下代码确定:SELECT x = NULL INTO #x; EXEC tempdb..sp_columns '#x'; 结果: TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME --------------- ----------- ---------- ----------- --------- --------- tempdb dbo #x___... x 4 int 在您将其放入表格或以其他方式与某些上下文元数据相关联之前,这会给您带来什么?有什么区别使它成为INT或DATETIME或其他什么?您将如何处理这些信息? SQL_VARIANT_PROPERTY返回NULL,因为它似乎要求元数据和值都有意义.观察(使用不同的类型只是为了混合它): SELECT SQL_VARIANT_PROPERTY(NULL,'BaseType'); DECLARE @x DATE; SELECT SQL_VARIANT_PROPERTY(@x,'BaseType'); DECLARE @y DATE = SYSDATETIME(); SELECT SQL_VARIANT_PROPERTY(@y,'BaseType'); 结果: NULL NULL date 所以它似乎需要一个类型和一个值才能准确地确定基类型. 至于为什么它以这种方式工作,耸耸肩.您必须向人们询问源代码访问权限. 请注意,当您强制使用SQL Server时,NULL只需要采用基类型:您已经基于它创建了一个表.很可能SQL Server会在这种情况下返回错误(实际上很多情况下它必须猜测你的数据类型).避免这种情况的方法是不要创建SQL Server必须猜测的情况(这就是为什么我问,你将如何处理这些信息?). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQL Server中Linked Server及Remote Server的使用示例
- sql – 不存在vs不存在:效率
- MySQL中参数sql_safe_updates在生产环境的使用详解
- mysql 5.7.5 m15 winx64.zip安装教程
- sql-server-2008 – 由于变量为NULL而避免IF ELSE
- sql – 可修改的连接视图是一个合理的设计选择吗?
- SQL Server 备份到异机的简单示例
- sql – “HAVING … GROUP BY”和“GROUP BY … HAVING”之
- sql – 如何在不使用子查询的情况下仅选择具有最大序列的行
- sql-server – 将SQLServer 2000数据库导出到XML的最简单方
