为什么此新的可为空的TimeStamp字段包含添加到具有现有记录的表之后的值?

时间:2019-01-02 15:48:16

标签: sql sql-server database

我有以下疑问。我正在使用 Microsoft SQL Server ,并在表中添加了一个名为Data的 TimeStamp 字段,该字段指定该字段为可空。我将此新字段添加到包含一些现有记录的表中。

问题是查询我的表:

SELECT TOP 1000 [ID]
      ,[Numero protocollo]
      ,[Anno]
      ,[IdUor]
      ,[Protocollista]
      ,[Protocollato]
      ,[Lavorato]
      ,[Errore]
      ,[CopiaConoscenza]
      ,[Inoltro]
      ,[Data]
  FROM [IWG_PG].[dbo].[PROT_INOLTRO]

我发现这些 Data 列包含的值包括 0x00000000000007F8 0x00000000000007F9 等,等等

为什么?我希望找到null。为什么这些记录在数据字段中具有值?

EDIT-!:这是脚本:

USE [IWG_PG]
GO

/****** Object:  Table [dbo].[PROT_INOLTRO]    Script Date: 1/2/2019 4:54:03 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[PROT_INOLTRO](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Numero protocollo] [int] NOT NULL,
    [Anno] [int] NOT NULL,
    [IdUor] [int] NOT NULL,
    [Protocollista] [nvarchar](50) NOT NULL,
    [Protocollato] [bit] NOT NULL,
    [Lavorato] [bit] NOT NULL,
    [Errore] [bit] NOT NULL,
    [CopiaConoscenza] [bit] NOT NULL,
    [Inoltro] [bit] NOT NULL,
    [Data] [timestamp] NULL,
 CONSTRAINT [PK_PROT_INOLTRO] PRIMARY KEY NONCLUSTERED 
(
    [Numero protocollo] ASC,
    [Anno] ASC,
    [IdUor] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

如您所见,数据字段设置为 NULL

2 个答案:

答案 0 :(得分:3)

不推荐使用timestamp数据类型,它也不是rowversion数据类型的同义词(有关详细信息,请参见https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017)。并且rowversion包含您获取的自动生成的二进制数字。在同一页面上引用:

  

是一种数据类型,它公开了数据库中自动生成的唯一二进制数。 rowversion通常用作版本标记表行的机制。存储大小为8个字节。 rowversion数据类型只是一个递增数字,并不保留日期或时间。要记录日期或时间,请使用datetime2数据类型。

也许您只想使用datetime列?

答案 1 :(得分:0)

您也不应该使用数据名称。此名称可以保留-> https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017

也许这可能会引起一些副作用