SQL_VARIANT和DATETIME2

时间:2019-11-25 19:51:26

标签: sql-server tsql sql-variant

假设您有下表:

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

为什么值会被截断?

1 个答案:

答案 0 :(得分:3)

使用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];