sql – NULL是否有数据类型?

前端之家收集整理的这篇文章主要介绍了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必须猜测的情况(这就是为什么我问,你将如何处理这些信息?).

猜你在找的MsSQL相关文章