今天我遇到了类似的代码。
SELECT AuditDomain,
ObjectId,
AuditSubdomain = CONVERT(VARCHAR(50), NULL),
SubDomainObjectId = CONVERT(INT, NULL)
FROM Audit这似乎意味着数据类型信息可以与空值相关联。这是否将元数据附加到将其标识为指定数据类型的空值?
This post详细介绍了一种在Sql Server中查找数据类型的方法,但当我尝试下面这行代码时,它返回的结果为NULL:
SELECT CAST(SQL_VARIANT_PROPERTY(CONVERT(INT, NULL), 'BaseType') AS VARCHAR(20))发布于 2013-03-27 05:24:57
在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必须猜测的情况(这就是为什么我问,您将如何处理这些信息?)。
https://stackoverflow.com/questions/15647580
复制相似问题