Buongiorno.

Cercando documentazione sul tipodati timestamp ho trovato questo link dove si dice che timestamp è deprecato (!?)

https://docs.microsoft.com/it-it/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017

(cit.)
"La sintassi di timestamp è deprecata. Questa funzionalità è in manutenzione e potrebbe essere rimossa in una delle prossime versioni di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata."

nel link cita il tipodati rowversion ma non lo trovo come tipo dati in sql server (2017)

la domanda è: timestamp va (andrebbe) sostituito... ma con quale tipo dati alternativo ?

Filippo
salve Filippo,
personalmente qualche cosa l'ho trovata, ad esempio
https://docs.microsoft.com/it-it/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017, dove ovviamente riporta anche tutti i remarks relativi al fatto che ogni rdbms lo implementa a modo proprio, ma c'e', ed era gia' raccomandato nell'uso gia' prima di deprecare timestamp, come gia' sapevi...

salutoni omnia
--
Andrea

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
Ciao Andrea.

Innanzitutto grazie per la risposta.

Si... avevo letto l'articolo.

Ma NON ho capito con quale "tipo dati" devo sostituire le colonne "timestamp" per avere un "tipo dati" equivalente.

nell' articolo dice CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;

ma genera sempre una colonna con "data type" timestamp (VerCol in struttura tabella si vede come timestamp)

O forse non ho capito io la "questione".

Filippo
719 messaggi dal 08 aprile 2009
Come da documentazione
https://docs.microsoft.com/it-it/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017
ti dice di non utilizzare più timestamp ma di utilizzare appunto rowversion.
Si mi era chiaro...

la questione è che se creo un campo rowversion (con script SQL) poi in struttura tabella con SSMS (18.3.1) mi restituisce sempre un timestamp come tipodati non un rowversion (!?).

quindi ha creato un rowversion o un timestamp ? (posto che i due tipi da quel che capisco sono sinonimi).

inoltre in struttura tabella da menu a discesa di SSMS (18.3.1) non esiste il tipodato rowversion ma solo timestamp quindi dal disegno della tabella un rowversion non lo puoi assegnare.

è forse un bug di SSMS (18.3.1) ?

Filippo
719 messaggi dal 08 aprile 2009
Ho provato e hai ragione.
Ma che versione del motore di SQL Server stai utilizzando?
Attenzione alla versione del motore con la versione del Management Studio
Ciao...

SQL SERVER 2017 versione inglese tutti gli aggiornamenti applicati.

SSMS 18.3.1 versione 18.3.1 (ultima disponibile).

può essere un bug ?

che sia un bug di SQL ... mi par strano...

Filippo
salve a tutti...
diciamo che "non e' un bug, ma una feature" :D:D:D:D

guardando le management views e anche INFORMATION_SCHEMA al momento il tipo base resta "timestamp",
questo, su SQL Server 2014:
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.tb1 (
  Id int NOT NULL,
  ts timestamp
  );

CREATE TABLE dbo.tb2 (
  Id int NOT NULL,
  rv rowversion
  );

GO
SELECT @@VERSION AS [SQLVersion];

SELECT COLUMN_NAME, DATA_TYPE 
  FROM INFORMATION_SCHEMA.COLUMNS c
    WHERE [TABLE_SCHEMA] ='dbo' AND TABLE_NAME = 'tb1';

SELECT COLUMN_NAME, DATA_TYPE 
  FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE [TABLE_SCHEMA] ='dbo' AND TABLE_NAME = 'tb2';

SELECT c.name AS [colName], TYP.name AS [sysName]
  FROM sys.tables t
    JOIN sys.columns c ON c.object_id = t.object_id
    JOIN sys.types TYP ON TYP.user_type_id = c.user_type_id
  WHERE t.name  = 'tb1';

SELECT c.name AS [colName], TYP.name AS [sysName]
  FROM sys.tables t
    JOIN sys.columns c ON c.object_id = t.object_id
    JOIN sys.types TYP ON TYP.user_type_id = c.user_type_id
  WHERE t.name  = 'tb2';

GO
DROP TABLE dbo.tb1, dbo.tb2;
--<---------------
SQLVersion
--------------------------------------------------------------------
Microsoft SQL Server 2014 (SP3-CU4) (KB4500181) - 12.0.6329.1 (X64) 
  Jul 20 2019 21:42:29 
  Copyright (c) Microsoft Corporation
  Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 18362: )


COLUMN_NAME          DATA_TYPE
-------------------- ---------------
Id                   int
ts                   timestamp

COLUMN_NAME          DATA_TYPE
-------------------- ---------------
Id                   int
rv                   timestamp

colName              sysName
-------------------- ---------------
Id                   int
ts                   timestamp

colName              sysName
-------------------- ---------------
Id                   int
rv                   timestamp


non ho qui una versione 2016 o successiva....
comunque, negli script DDL "usate sempre" rowversion e non timestamp... poi, prima o poi, verra' modificata anche la system management view che restituisce la stringa "timestamp" dappertutto :D:D

salutoni omnia

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.