2012-05-15 36 views
18

He leído solo el acceso a alguna base de datos SQL Sever 2008 R2 y necesito copiar datos de algunas de sus tablas a las tablas en mi base de datos; ambas bases de datos tienen la misma intercalación.Convertir entre texto y varchar (MAX) en SQL Server

La base de datos de origen utiliza muchas columnas del tipo de datos text. ¿Puedo hacer de forma segura las columnas de destino en mi base de datos de tipo varchar(MAX) y copiar datos sin ningún riesgo (estoy usando instrucciones INSERT para copiar datos)?

En otras palabras, ¿puedo copiar con seguridad los datos de cadena de la columna del tipo text a la columna de varchar(MAX)? Ambas columnas usan la misma intercalación.

+0

Nota: después de que nos advierte desde hace años - MS en realidad han eliminado tipo TEXT para 'SQL Data Warehouse' en la nube. Todavía está disponible para 'Base de datos SQL de Azure' pero el almacenamiento de datos super-high-end lo ha eliminado: https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse -tables-data-types –

Respuesta

33

Sí, definitivamente - VARCHAR(MAX) es el tipo que debe usar de todos modos. La implementación subyacente de ambos tipos es esencialmente la misma (en datos suficientemente grandes o después de un cambio de tipo de texto a VARCHAR(MAX)), si te preocupas por eso.

Incluso puede "convertir" a una columna existente de tipo TEXT a VARCHAR(MAX) mediante:

ALTER TABLE dbo.YourTableHere 
ALTER COLUMN YourTextColumnHere VARCHAR(MAX) 

Esto a su vez su columna TEXT en una columna VARCHAR(MAX) sin ninguna pérdida de datos.

¡Pruébelo! (en un copia de su base de datos existente en primer lugar, por supuesto)

+0

es realmente seguro hacerlo. ¿Qué sucede si la columna 'text' es más grande que la columna' varchar (max) '. ¿No cortarás el texto entonces? – Arion

+2

Sí, es seguro. 'NVARCHAR (max)' no es 'NVARCHAR (4000)'. No hay límite de longitud con 'NVARCHAR (max)'. –

+1

Ok. Entonces una simple prueba. De esta manera: 'DECLARE @text VARCHAR (MAX); SET @ text = REPLICATE ('0,', 200000); SELECT DATALENGTH (@text);'. ¿Puedes explicar por qué DATALENGTH devuelve 8000? – Arion

Cuestiones relacionadas