Comment voulez-vous convertir le TIMESTAMP VARCHAR pour en MSSQL?
Vous aimeriez appeler une procédure stockée sur MS SQL qui a un paramètre de type TIMESTAMP dans le T-SQL, pas ADO.NET à l'aide d'une valeur VARCHAR (par exemple '0x0000000002C490C8').
Que faites-vous?
Mise à JOUR:
C'est là que vous avez un "Timestamp" valeur de venir à vous, mais n'existe que comme VARCHAR. (Pensez à la variable de SORTIE sur une autre procédure stockée, mais il est déjà fixé comme VARCHAR, il a juste la valeur d'un TIMESTAMP). Donc, sauf si vous décidez de construire SQL Dynamique, comment pouvez-vous modifier par programmation une valeur stockée dans VARCHAR dans un TIMESTAMP valide?
Est ce que la valeur comme le nombre de millisecondes écoulées depuis l'époque?
Non, c'est la base de données à l'échelle de l'identificateur unique. Le nom timestamp est en quelque sorte un abus de langage; il est plus proche de ce que d'autres DBs appeler un rowid.
OK, désolé, pas comme sur MS SQL types de données que je dois être!
Pas un problème, il me confond trop. (Et j'ai seulement été en mesure d'être "le plus rapide du pistolet dans l'ouest" ici parce que j'ai été littéralement juste faire cette recherche l'autre jour une table dans un projet que j'ai hérité ... 🙂
Oooh ... la mise à jour qui rend ce beaucoup plus compliqué!
Non, c'est la base de données à l'échelle de l'identificateur unique. Le nom timestamp est en quelque sorte un abus de langage; il est plus proche de ce que d'autres DBs appeler un rowid.
OK, désolé, pas comme sur MS SQL types de données que je dois être!
Pas un problème, il me confond trop. (Et j'ai seulement été en mesure d'être "le plus rapide du pistolet dans l'ouest" ici parce que j'ai été littéralement juste faire cette recherche l'autre jour une table dans un projet que j'ai hérité ... 🙂
Oooh ... la mise à jour qui rend ce beaucoup plus compliqué!
OriginalL'auteur Brett Veenstra | 2008-10-10
Vous devez vous connecter pour publier un commentaire.
Un horodatage type de données est gérée par SQL Server. Je ne l'ai jamais vu utilisé à un endroit autre que comme une colonne de table de type. À ce titre, la colonne de type timestamp va vous donner une rigoureuse ordinale de la dernière insertion/mise à jour sur la ligne par rapport à toutes les autres mises à jour dans la base de données. Pour consulter les plus récents ordinale à travers l'ensemble de la base de données, vous pouvez récupérer la valeur de @@DBTS ou rowversion().
Par http://msdn.microsoft.com/en-us/library/ms182776(SQL.90).aspx
Par conséquent, la volatilité de la valeur d'une colonne timestamp ne peut pas être définie et est sujette à changement à tout modifaction à la ligne. Vous pouvez, cependant, gel de la valeur du timestamp varbinary(8) de la valeur.
Par exemple, disons que vous avez eu une table source et une table cible.
CREATE TABLE tblSource (
Id int not null
colData int not null
colTimestamp timestamp null)
CREATE TABLE tblTarget (
Id int not null
colData int not null
colTimestampVarBinary varbinary(8) null)
Puis, dans un processus d'extraction, vous pouvez capturer tout ce qui a été mis à jour depuis la dernière fois que vous avez exécuté le processus d'extraction.
DECLARE @maxFrozenTargetTimestamp varchar(8)
SELECT @maxFrozenTargetTimestamp = max(colStamp) FROM tblTarget
INSERT tblTarget(Id, colData, colTimestampVarBinary)
SELECT
Id
,colData
, colTimestampVarBinary = convert(varbinary(8) colTimestamp)
FROM
tblSource
WHERE
tblSource.colTimestamp > @maxFrozenTargetTimestamp
Si vous rencontrez des problèmes, ma première hypothèse serait que le cœur de votre problème
est dans la conversion d'un type varchar varbinary(8), et non pas à un type timestamp.
Pour plus d'info (peut-être trop) , voir le commentaire (la quatrième en bas) j'ai laissé le blog http://vadivel.blogspot.com/2004/10/about-timestamp-datatype-of-sql-server.html?showComment=1213612020000
OriginalL'auteur 6eorge Jetson
Depuis timestamp est compatible avec varbinary la solution sera dans SQL Server 2008:
De référence. MSN Blogs
OriginalL'auteur Sanchitos
Un TIMESTAMP est sémantiquement équivalent à VARBINARY(8) (nullable) ou BINAIRE(8) (non nullable). Donc, vous devriez être en mesure d'appeler la procédure avec le paramètre non cotées, comme suit:
Voir aussi Documentation en Ligne de SQL
MODIFIER pour la mise à jour de question ...
J'ai juste essayé quelques expériences. Franchement, je suis curieux de savoir comment vous avez obtenu cette représenté comme un varchar, en premier lieu, depuis quand je fais quelque chose comme:
Où ts est un timestamp, je reçois 10 lignes vides. (Si je ne vous convertissez pas, je vois mon horodateurs.)
Cependant, j'ai essayé d'y travailler dans la bonne direction ... je l'ai fait:
Et la conversion a entraîné
0x3078303030303030
. Donc qui ne jouent pas. Ni de la conversion en binaire.Je déteste dire ça, mais vous pourriez être coincé dans une dynamique SQL monde. J'avais vraiment aime être tort, bien que.
OriginalL'auteur John Rudy