当前位置: 首页 > 面试题库 >

NULL是否具有数据类型?

姜宏放
2023-03-14
问题内容

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

SELECT AuditDomain, 
    ObjectId,
    AuditSubdomain = CONVERT(VARCHAR(50), NULL),
    SubDomainObjectId = CONVERT(INT, NULL)
FROM Audit

似乎暗示数据类型信息可以与NULL值关联。这是否将元数据附加到将其标识为指定数据类型的NULL值?

这篇文章详细介绍了一种在SqlServer中查找数据类型的方法,但是当我尝试以下行时,它以NULL的形式返回:

SELECT CAST(SQL_VARIANT_PROPERTY(CONVERT(INT, NULL), 'BaseType') AS VARCHAR(20))

问题答案:

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

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

因此,为了准确确定基本类型,它似乎既需要类型 需要值。

至于为什么它如此工作, 耸耸肩 。您必须询问具有源代码访问权限的人员。

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



 类似资料:
  • 问题内容: 我在DB2中有此查询 如果is为,并且假设and为 Date 数据类型,它将大于的任何值吗? 请帮忙。提前致谢。 问题答案: 对于比较可以包含NULL值的值有用的另一个谓词是DISTINCT谓词。如果两列均包含相等的非null值,则使用普通的相等比较(COL1 = COL2)比较两列将为true。如果两个列都为null,则结果将为false,因为null永远不会等于任何其他值,甚至不会

  • 问题内容: 我有一些代码可以返回新的iOS 10 / Swift 3 NSData替换(?)类型:数据 我想将此映像写入磁盘,但是此类不存在NSData的方法。它确实有一个方法,但是似乎不适用于文件路径(和附加组件)。 任何人都可以澄清一下我现在该如何做,就像Swift 2中的情况一样: 谢谢! 问题答案: 使用。 例如: 或者,如果您确实对坚持不懈,请将其转换为: 但是,通常,如今最好在整个代码

  • 问题内容: 我需要布尔数组的紧凑表示形式,Python是否具有内置的位域类型,还是需要找到其他解决方案? 问题答案: 当我最近有类似需求时,Bitarray是我找到的最佳答案。它是C的扩展(比纯Python的BitVector快得多),并将其数据存储在实际的位域中(因此,内存效率是numpy布尔数组的八倍,后者似乎每个元素使用一个字节。)

  • 问题内容: 有没有办法检查输入流()是否有数据? 从GO的初始stdin中读取帖子?显示了如何读取数据,但是不幸的是,如果没有数据通过管道传送到stdin中,则会阻塞。 问题答案: os.Stdin与其他任何“文件”一样,因此您可以检查其大小: 我将其构建为“管道”可执行文件,其工作方式如下:

  • 我有一个数据类(如下所示) 在下面给出的另一个函数中,我将其作为参数调用 如何直接在kotlin中检查请求是否不为null?

  • 问题内容: 我需要为正在使用的API 指定一个,但实际上不需要输出。Java是否具有等同于? 问题答案: 从Java 11开始,有一个静态工具可以完全满足您的需要,它是一个静态工厂方法: 返回一个丢弃所有字节的新OutputStream。返回的流最初是打开的。通过调用close()方法关闭流。随后对close()的调用无效。