首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NULL有数据类型吗?

NULL有数据类型吗?
EN

Stack Overflow用户
提问于 2013-03-27 05:16:53
回答 5查看 19.6K关注 0票数 11

今天我遇到了类似的代码。

代码语言:javascript
复制
SELECT AuditDomain, 
    ObjectId,
    AuditSubdomain = CONVERT(VARCHAR(50), NULL),
    SubDomainObjectId = CONVERT(INT, NULL)
FROM Audit

这似乎意味着数据类型信息可以与空值相关联。这是否将元数据附加到将其标识为指定数据类型的空值?

This post详细介绍了一种在Sql Server中查找数据类型的方法,但当我尝试下面这行代码时,它返回的结果为NULL:

代码语言:javascript
复制
SELECT CAST(SQL_VARIANT_PROPERTY(CONVERT(INT, NULL), 'BaseType') AS VARCHAR(20))
EN

Stack Overflow用户

回答已采纳

发布于 2013-03-27 05:24:57

在SQL Server中,在我能想到的所有场景中,默认情况下NULL都是一个INT。您可以使用以下代码来确定这一点:

代码语言:javascript
复制
SELECT x = NULL INTO #x;
EXEC tempdb..sp_columns '#x';

结果:

代码语言:javascript
复制
TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME
--------------- ----------- ---------- ----------- --------- ---------
tempdb          dbo         #x___...   x           4         int

在您将其放入表中或以其他方式将其与一些上下文元数据相关联之前,这给您带来了什么?是INT还是DATETIME或者其他什么有什么区别呢?您将如何处理这些信息?

SQL_VARIANT_PROPERTY返回NULL,因为它似乎同时需要元数据和值才有意义。观察(使用不同的类型将其混合):

代码语言:javascript
复制
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');

结果:

代码语言:javascript
复制
NULL

NULL

date

因此,为了准确地确定基类型,似乎需要同时使用类型和值。

至于它到底为什么会这样工作,你可以耸肩。你得去问那些有源代码访问权的人。

请注意,只有当您强迫SQL Server使用时,NULL才必须采用一个基类型:您已经基于它创建了一个表。在这种情况下,SQL Server很可能会返回一个错误(事实上,在许多情况下,它必须猜测您所指的数据类型)。避免这种情况的方法是不要创建SQL Server必须猜测的情况(这就是为什么我问,您将如何处理这些信息?)。

票数 16
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15647580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档