SQL Server: Impossible d'insérer une valeur explicite dans une colonne de type timestamp
Lors de l'utilisation de cette instruction
create table demo (
ts timestamp
)
insert into demo select current_timestamp
J'obtiens l'erreur suivante:
Impossible d'insérer une valeur explicite dans une colonne de type timestamp. Utilisez INSERT avec une liste de colonne d'exclure la colonne timestamp, ou insérer une valeur par DÉFAUT dans la colonne timestamp
Comment puis-je insérer l'heure actuelle à un timestamp
de la colonne?
- double possible de SQL Server 2K - Insérer explicite de la valeur pour la colonne timestamp?
InformationsquelleAutor juergen d | 2012-04-21
Vous devez vous connecter pour publier un commentaire.
Selon MSDN,
timestamp
Vous êtes probablement à la recherche pour le
datetime
type de données à la place.Si vous avez un besoin de copier exactement le même horodatage des données, modifier le type de données dans la table de destination à partir de timestamp en binaire(8) -- j'ai utilisé varbinary(8) et il a bien fonctionné.
De toute évidence, cela rompt un timestamp de la fonctionnalité dans la table de destination, donc assurez-vous que vous êtes ok avec ce premier.
Vous ne pouvez pas insérer les valeurs dans la colonne timestamp explicitement. Il est auto-généré. Ne pas utiliser cette colonne dans votre instruction insert. Reportez-vous http://msdn.microsoft.com/en-us/library/ms182776(SQL.90).aspx pour plus de détails.
Vous pouvez utiliser un datetime au lieu d'un timestamp comme ceci:
Retourne:
Comment insérer heure actuelle dans un timestamp SQL Server:
Réponse: Vous ne pouvez pas, et voici pourquoi.
Dans les plus récentes versions de SQL Server,
timestamp
est renommé pourRowVersion
. A juste titre, parce que timestamp est très trompeur.SQL Serveur d'horodatage n'EST PAS définie par l'utilisateur et ne constituent pas une date ou une heure. timestamp est juste une représentation binaire des nombres consécutifs, il est seulement bon pour s'assurer de la ligne n'a pas changé depuis qu'il a été lu.
Si vous souhaitez stocker une date ou une heure, ne pas utiliser l'horodatage, vous devez utiliser l'un des autres types de données, comme par exemple
datetime
,smalldatetime
,date
,time
ouDATETIME2
Par exemple:
Afin d'horodatage est une sorte de nombre binaire. Que faire si nous essayons moulage datetime?
L'année en cours pour moi n'est pas 1900. Donc je ne suis pas sûr de ce que SQL Server est la pensée.
Assumer Table1 et Table2 ont trois colonnes A, B et TimeStamp. Je veux insérer de la table Table1 dans Table2.
Cela échoue avec l'horodatage erreur:
Cela fonctionne:
Il y a quelques bonnes informations dans ces réponses. Supposons que vous travaillez avec des bases de données qui vous ne pouvez pas modifier, et que vous êtes de la copie de données à partir d'une version de la table à l'autre, ou de la même table dans une base de données à l'autre. Supposons également qu'il y a beaucoup de colonnes, et vous avez besoin des données de toutes les colonnes, ou les colonnes qui vous n'avez pas besoin n'ont pas de valeurs par défaut. Vous avez besoin d'écrire une requête avec tous les noms de colonne.
Voici une requête qui retourne tous les non-horodatage des noms de colonne d'un tableau, que vous pouvez couper et coller dans votre requête d'insertion. FYI: 189 est l'ID du type de timestamp.
Il suffit de changer le nom de la table au dessus de 'Produit' de votre nom de table. La requête renvoie une liste des noms de colonnes:
Si vous copiez des données d'une base de données (DB1) à une autre base de données(DB2) vous pouvez utiliser cette requête.
créer une table de démo (
id de type int,
ts timestamp
)
insérer dans la démo(id,ts)
les valeurs (1 par DÉFAUT)