Puis-je définir 2 Mo pour la taille maximale de varbinary?

Pour autant que je sache, la valeur maximale que vous pouvez définir "manuellement" est 8000 -> varbinary(8000) qui, autant que je sache, signifie 8000 bytes -> 7,8125 KByte .

Est-il possible de définir max à 2 MB ? Quelque chose ike varbinary(2097152) , ou dois-je le mettre à varbinary(max) et vérifier la taille du file grâce à mon script d'insertion de téléchargement / sql?

Vous pouvez utiliser une CHECK CONSTRAINT pour vous assurer que la taille est inférieure à 2 Mo:

 CREATE TABLE dbo.T ( ID INT IDENTITY, VarB VARBINARY(MAX) ); ALTER TABLE dbo.T ADD CONSTRAINT CHK_T_VarB__2MB CHECK (DATALENGTH(VarB) <= 2097152); 

Ensuite, lorsque vous essayez d'insert quelque chose de plus de 2 Mo:

 DECLARE @B VARCHAR(MAX) = '|'; INSERT dbo.T (VarB) SELECT CONVERT(VARBINARY(MAX), REPLICATE(@B, 2097153)); 

Vous obtenez une erreur:

L'instruction INSERT était en conflit avec la contrainte CHECK "CHK_T_Column__2MB". Le conflit s'est produit dans la database "TestDB", table "dbo.T", colonne "VarB".

Il n'y a aucune disposition pour spécifier varbinary (2097152), Une fois si vous croisez 8000 octets, vous devriez aller pour max mot-key seulement.

Il ne consumra que la memory dont vous avez besoin (dans votre cas, il est de 2 Mo) et il va stocker jusqu'à 2 Go à max.

 varbinary(max) = 2 gigabytes.