我有以下疑问。我正在使用 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
答案 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
也许这可能会引起一些副作用