Convertir entre texte et varchar(MAX) dans SQL Server
J'ai lu seulement l'accès à certains SQL server 2008 R2 base de données et j'ai besoin de copier des données à partir de certains de ses tables de tables de ma base de données; les deux bases de données ont le même classement.
La source de base de données utilise un grand nombre de colonnes de text
type de données. Je peux faire la cible des colonnes dans ma base de données de type varchar(MAX)
et de copier les données sans aucun risque (je suis en utilisant les instructions INSERT pour copier des données)?
En d'autres termes, je peux copier des données de chaîne à partir de la colonne de text
type de la colonne de varchar(MAX)
? Les deux colonnes d'utiliser le même classement.
- Remarque: après la mise en garde de nous - MS ont effectivement retiré type de TEXTE pour
Sql Data Warehouse
dans le cloud. Il est toujours disponible pourAzure SQL Database
mais le super haut de gamme d'entreposage de données a été retirée : docs.microsoft.com/en-us/azure/sql-data-warehouse/...
Vous devez vous connecter pour publier un commentaire.
Oui, certainement -
VARCHAR(MAX)
est le type que vous devriez être en utilisant de toute façon. L'implémentation sous-jacente de ces deux types est essentiellement le même (sur de grandes suffisamment de données, ou après un changement de type de texte àVARCHAR(MAX)
), si vous vous inquiétez à ce sujet.Vous pouvez même "convertir" une colonne existante de type
TEXT
àVARCHAR(MAX)
par le biais de:Cela va transformer votre
TEXT
colonne dans unVARCHAR(MAX)
colonne sans aucune perte de données.L'essayer! (sur un copie de votre base de données existante d'abord, bien sûr)
text
colonne est plus grande que l'varchar(max)
colonne. Would'nt vous couper le texte alors?NVARCHAR(max)
n'est pasNVARCHAR(4000)
. Il n'y a pas de limite de longueur avecNVARCHAR(max)
.DECLARE @text VARCHAR(MAX);SET @text=REPLICATE('0,',200000);SELECT DATALENGTH(@text);
. Pouvez-vous expliquer pourquoi DATALENGTH retour 8000?SET @Text = @Text + @Text + @Text
et vous obtenez 24'000 caractères.... c'est une limitation de SQL Server Management Studio - pas de SQL Server.NVARCHAR(MAX)
estNVARCHAR(1000000000)
avec une optimisation des performances pour les données qui permettraient d'arriver à tenir dansNVARCHAR(4000)
: ces courts données sont stockées en ligne (enNVARCHAR
de la mode), tandis que les grandes données sont stockées comme des gouttes, dansNTEXT
comme la mode.REPLICATE
effet est causé par le type de votre '0,' chaîne de caractères (rétro-compatible comportement). La suivante va générer d'énormes données parfaitement:REPLICATE(CAST('0,' as NVARCHAR(MAX)), 200000))
. SSM est pas en cause ici.