Почему это новое пустое поле TimeStamp содержит значения, после чего я добавил в таблицу уже существующие записи? - PullRequest
0 голосов
/ 02 января 2019

У меня есть следующие сомнения. Я работаю с Microsoft SQL Server , и я добавил в таблицу поле TimeStamp с именем Data, указывающее, что это поле можно обнулять. Я добавил это новое поле в таблицу, содержащую несколько уже существующих записей.

Проблема в том, что запрос к моей таблице:

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

Я получаю, что эти Данные кулм содержат значения как 0x00000000000007F8 , 0x00000000000007F9 , etcetc

Почему? Я ожидал найти ноль. Почему эти записи имеют значение для поля Данные ?

РЕДАКТИРОВАТЬ -! : Это скрипт:

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

Как видите, для поля Data установлено значение NULL

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Тип данных 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?

0 голосов
/ 02 января 2019

Вы также не должны использовать имя Данные. Это имя может быть зарезервировано -> https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017

Может быть, это может вызвать некоторые побочные эффекты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...