2012-05-15 11 views
18

Mam dostęp tylko do odczytu do pewnej bazy danych SQL Sever 2008 R2 i muszę skopiować dane z niektórych tabel do tabel w mojej bazie danych; obie bazy danych mają takie same sortowanie.Konwersja między tekstem a varcharem (MAX) w SQL Server

Źródłowa baza danych używa wielu kolumn o typie text. Czy mogę bezpiecznie tworzyć kolumny docelowe w mojej bazie danych typu varchar(MAX) i kopiować dane bez żadnego ryzyka (używam instrukcji INSERT do kopiowania danych)?

Innymi słowy, czy mogę bezpiecznie kopiować dane ciągów z kolumny typu text do kolumny varchar(MAX)? Obie kolumny używają tego samego sortowania.

+0

Uwaga: po ostrzega nas przez lata - MS faktycznie usunięty tekst typ danych SQL dla 'Warehouse' w chmurze. Jest nadal dostępny dla 'Baza danych SQL Azure', ale super-wysokiej klasy hurtownia danych usunęła go: https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse -tables-data-types –

Odpowiedz

33

Tak, zdecydowanie - VARCHAR(MAX) jest typem, którego należy i tak używać. Podstawowa implementacja obu typów jest zasadniczo taka sama (na wystarczająco dużych danych lub po zmianie typu z tekstu na VARCHAR(MAX)), jeśli się o to martwisz.

Można nawet „konwersji” istniejącej kolumny typu TEXT do VARCHAR(MAX) poprzez:

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

to zmieni swoją kolumnę TEXT do kolumny VARCHAR(MAX) bez utraty danych.

Wypróbuj! (na skopiować z istniejącej bazy danych po pierwsze, oczywiście)

+0

Czy to naprawdę bezpieczne? Co się dzieje, gdy kolumna 'text' jest większa niż kolumna' varchar (max) '. Czy nie mógłbyś wtedy wyciąć tekstu? – Arion

+2

Tak, jest bezpieczny. 'NVARCHAR (max)' nie jest 'NVARCHAR (4000)'. Nie ma ograniczenia długości z 'NVARCHAR (max)'. –

+1

Ok. Tak prosty test. W ten sposób: 'DECLARE @text VARCHAR (MAX); SET @ text = REPLICATE ('0,', 200000); SELECT DATALENGTH (@text);'. Czy możesz wyjaśnić, dlaczego DATALENGTH zwraca 8000? – Arion

Powiązane problemy