J'essaie de stocker et de récupérer un int64 non signé à l'aide de Microsoft SQL Server (et finalement d'utiliser ADO.NET EF), mais j'ai des problèmes. Comme vous ne pouvez pas spécifier une colonne entière comme non signée dans SQL Server, j'ai essayé d'utiliser binary (8), mais cela ne fonctionne pas comme prévu. Les requêtes suivantes donnent lieu à une valeur inattendue (0x03E8000000000000 et 281474976710656000):Utilisation d'un BIGINT non signé dans SQL Server
UPDATE table SET uint64 = 0x3E8
SELECT uint64, cast(uint64 as bigint) FROM table
Si je lance ce qui suit, cependant, il semble fonctionner OK (retour 0x00000000000003E8, 1000):
UPDATE table SET uint64 = 1000
SELECT uint64, cast(uint64 as bigint) FROM table
Malheureusement , le SQL créé par Entity Framework semble exécuter la première instruction de mise à jour (j'utilise BitConverter.ToBytes() lors de la conversion de ma variable ulong).
Est-ce ma meilleure option si je veux stocker un entier 64 bits non signé dans SQL Server? Y a-t-il une meilleure option que d'utiliser BitConverter (autre que d'écrire le mien pour trier le tableau LPAD avec le nombre approprié de zéros)?
Je ne suis pas en utilisant le type de données BIGINT .. J'utilise binary (8). Quelle est la différence entre binary et varbinary? – Langdon
Euh, je suppose que je peux Google cela. varbinary (8) semble fonctionner correctement et n'a pas le même comportement. Merci! – Langdon