SQL_VARIANT and DATETIME2



假设您有下表:

CREATE TABLE [dbo].[Test]
(
[Value] [sql_variant] NOT NULL
)

让我们插入一些DATETIME2值:

INSERT INTO [dbo].[Test]
(
[Value]
)
VALUES
(
SYSUTCDATETIME()
)

现在,让我们看看结果:

SELECT
[Value],
SQL_VARIANT_PROPERTY([Value], 'BaseType') AS BaseType
FROM
[dbo].[Test]

Value                     BaseType
-----------------------------------
2019-11-25 19:39:43.274   datetime2
2019-11-25 19:43:49.735   datetime2

为什么这些值会被截断?

使用sql_variant时,您需要具体说明要返回的数据类型;否则 SQL Server 将推断显示格式。但是,数据尚未被截断。例如,如果您尝试以下操作,您将看到datetime2(7)作为Value_DT2的结果:

SELECT [Value],
CONVERT(datetime2,[Value]) AS Value_DT2,
SQL_VARIANT_PROPERTY([Value], 'BaseType') AS BaseType
FROM [dbo].[Test];

最新更新